现在我正在学习如何在r中使用purrr包,并考虑如何生成每个1,2,...,99,100个硬币翻转的5个样本。 我的图像是创建一个列表,看起来应该是......
[[1]]
[[1]]
[1] 1 0 1 0 0
[[2]]
[[1]]
[1] 1 0 0 0 1
[[2]]
[1] 0 1 0 1 1
[[3]]
[[1]]
[1] 0 1 1 1 0
[[2]]
[1] 1 0 0 0 1
[[3]]
[1] 0 1 1 1 1
..
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:3)
您希望使用map函数将函数rerun
应用于向量1:100
的每个元素,如下所示
library(purrr)
1:100 %>% map(function(x) rerun(x, rbinom(5,1,.5)))
然而,使用replicate
同样容易,其中复制的默认值是生成列式数组。
lapply(1:100, function(x) replicate(x,rbinom(5,1,0.5)))
请注意,在这种情况下,基本R表达式要快得多。
a <- function() 1:100 %>% map(function(x) rerun(x, rbinom(5,1,.5)))
b <- function() lapply(1:100, function(x) replicate(x,rbinom(5,1,0.5)))
library(microbenchmark)
microbenchmark(a(),b())
Unit: milliseconds
expr min lq mean median uq max neval cld
a() 96.89941 104.83822 117.10245 111.48309 120.28554 391.9411 100 b
b() 16.88232 18.47104 23.22976 22.20549 26.31445 49.0042 100 a
编辑关于您在评论中提出的问题,如果您只是对大数字代表法律感兴趣,可以执行以下操作。
plot(1:100, do.call("c", lapply(b(), mean)),
type= "l", xlab = "replications",
ylab = "proportion of heads")
abline(h = .5)
答案 1 :(得分:0)
如果我理解正确,那就是你所追求的:
Components