大家好,我已经阅读了帮助文件和这里关于这个主题的很多问题,但找不到答案。我相信这是一个非常简单的问题,所以我可能遗漏了一些显而易见的东西
我想替换这样一个基本的for loop
实现,例如
lst <- list()
for (i in 1:10) {
lst[[i]] <- rnorm(n = 3, mean = 5, sd = 3)
}
lst
使用purrr::map()
,同时使用函数的所有参数(此处:rnorm()
(
以下操作不起作用,并返回一个unused argument
错误。
1:10 %>%
map(rnorm, n = 3, mean = 5, sd = 3)
# Error in .f(.x[[i]], ...) : unused argument (.x[[i]])
以下运行,但map将参数1:10
传递给了rnorm(sd = .x)
,因此结果不是预期的那样。
library(purrr)
1:3 %>%
map(rnorm, n = 3, mean = 5)
#> [[1]]
#> [1] 5.133702 6.456135 5.041438
#>
#> [[2]]
#> [1] 5.722486 4.614772 2.640809
#>
#> [[3]]
#> [1] 1.445749 5.826666 6.096497
有没有一种简单的方法可以实现这一点?
我感谢您的时间和关注
您可以使用for
循环和/或map
来完成此操作,但我认为这更像是replicate
或purrr::rerun
的问题。
在基地R:
replicate(10, rnorm(n = 3, mean = 5, sd = 3), simplify = FALSE)
或使用purrr
:
purrr::rerun(10, rnorm(n = 3, mean = 5, sd = 3))
有两种方法可以做到这一点。第一个是匿名函数,第二个是公式。有关更多信息,请参阅?map()
中的示例。
-
匿名函数
library(purrr) 1:10 %>% map(function(x) rnorm(n = 3, mean = 5, sd = 3))
-
公式
1:10 %>% map(~ rnorm(n = 3, mean = 5, sd = 3))