我想對兩個列表元素的每個組合應用一個函數。
library(tidyverse)
map(
.x = c(0, 1)
, .f = function(x) {
qnorm(p = 0.05, mean = x, sd = 1, lower.tail = FALSE)
}
)
[[1]]
[1] 1.644854
[[2]]
[1] 2.644854
map(
.x = c(0, 1)
, .f = function(x) {
qnorm(p = 0.05, mean = x, sd = 2, lower.tail = FALSE)
}
)
[[1]]
[1] 3.289707
[[2]]
[1] 4.289707
現在嘗試將兩者合二為一(無論如何都沒有獲得所需的輸出)。
map2(
.x = c(0, 1)
, .y = c(1, 2)
, .f = function(x, y) {
qnorm(p = 0.05, mean = x, sd = y, lower.tail = FALSE)
}
)
[[1]]
[1] 1.644854
[[2]]
[1] 4.289707
想知道如何獲得所有四種組合的輸出?
或另一種選擇pmap
和crossing
library(tidyr)
library(purrr)
library(dplyr)
crossing(v1 = 0:1, v2 = 1:2) %>%
pmap_dbl(~ qnorm(p = 0.05, mean = ..1, sd = ..2, lower.tail = FALSE))
[1] 1.644854 3.289707 2.644854 4.289707
如果我們需要一個 data.frame/tibble,使用裡面的pmap
代碼mutate
作為一個新列返回
crossing(v1 = 0:1, v2 = 1:2) %>%
mutate(new = pmap_dbl(., ~ qnorm(p = 0.05,
mean = ..1, sd = ..2, lower.tail = FALSE)))
# A tibble: 4 × 3
v1 v2 new
<int> <int> <dbl>
1 0 1 1.64
2 0 2 3.29
3 1 1 2.64
4 1 2 4.29
注意:如果我們不需要其他列,使用transmute
替代的mutate
或指定.keep = "used"
的mutate
crossing(v1 = 0:1, v2 = 1:2) %>%
mutate(new = pmap_dbl(., ~ qnorm(p = 0.05,
mean = ..1, sd = ..2, lower.tail = FALSE)), .keep = "used")
# A tibble: 4 × 1
new
<dbl>
1 1.64
2 3.29
3 2.64
4 4.29
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句