gpt4 book ai didi

r - 使用公式(而不是函数)指定 map2() 的选项

转载 作者:行者123 更新时间:2023-12-01 09:44:49 24 4
gpt4 key购买 nike

例如,我正在尝试使用 purrr::map2() 在向量上迭代 rnorm() 并且我想指定选项 nsd但不是意思

使用“公式”的方式,我可以这样做:

len <- c(1, 3, 10); sigma <- c(1, 1, 10)
set.seed(123)
map2(len, sigma, ~rnorm(n = .x, sd = .y))

但是是否可以指定 nsd 而不用“函数”方式指定 mean ?如果我执行以下操作,它会为 mean 填充“sigma”,因为 mean 是 rnorm() 中 n 之后的下一个选项。

set.seed(123)
map2(len, sigma, rnorm)

我可以指定 mean 为 0,以便“sigma”适用于 sd,如下所示:

set.seed(123)
map2(len, sigma, rnorm, mean = 0)

但是,如果我想将 mean 保留为默认值(不指定它)并且仍然将“sigma”应用于 sd,该怎么办?如,如果我使用“函数”方法,有没有办法做类似 .x/.y 的事情。

抱歉,这太罗嗦了。非常感谢!

最佳答案

不,因为您必须手动将数据定向到第一个参数以外的参数[s]。这是base R的Map的优点之一,它可以带命名参数进行迭代:

library(purrr)

len <- c(1, 3, 10)
sigma <- c(1, 1, 10)

set.seed(123)
map2(len, sigma, ~rnorm(n = .x, sd = .y)) %>% str()
#> List of 3
#> $ : num -0.56
#> $ : num [1:3] -0.2302 1.5587 0.0705
#> $ : num [1:10] 1.29 17.15 4.61 -12.65 -6.87 ...

set.seed(123)
Map(rnorm, n = len, sd = sigma) %>% str()
#> List of 3
#> $ : num -0.56
#> $ : num [1:3] -0.2302 1.5587 0.0705
#> $ : num [1:10] 1.29 17.15 4.61 -12.65 -6.87 ...

你不能在 map2 中做同样的事情,因为输入参数被命名为 .x.y,而 Map... 中的所有参数都吸了进去。

关于r - 使用公式(而不是函数)指定 map2() 的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51457620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com