使用 R,从 Bernoulli(p) 生成数据,用于各种样本大小(n = 10、15、20、25、30、50、100、150、200),对于 p = 0.01、0.4、0.8
我知道如何使用 rbinom 函数来处理一种情况。就像第一个场景一样:rbinom(n=10, size=1, p=0.01)。
我的目标是构建一个可以计算所有这些场景的函数,从而阻止我单独完成所有这些场景。
使用 R,从 Bernoulli(p) 生成数据,用于各种样本大小(n = 10、15、20、25、30、50、100、150、200),对于 p = 0.01、0.4、0.8
我知道如何使用 rbinom 函数来处理一种情况。就像第一个场景一样:rbinom(n=10, size=1, p=0.01)。
我的目标是构建一个可以计算所有这些场景的函数,从而阻止我单独完成所有这些场景。
以下函数将为您提供列表列表。我试图给他们适当的命名。
ff <- function(n,probs) {
res <- lapply(n, function(i) {
setNames(lapply(probs, function(p) {
rbinom(n=i, size=1, p=p)
}),paste0("p=",probs))
})
names(res) <- paste0("n=",n)
res
}
就像这样称呼它ff(n=c(10,15,20),probs = c(0.01,0.4,0.8))
,您将获得一个长度为 3 的列表(对于每个 n),其中包含一个长度为 3 的列表(对于每个概率)以及来自伯努利样本的向量。
您可以生成一个dataframe
np 组合,expand.grid
然后使用包的map2
功能tidyverse purrr
为 np 对生成输出列表:
library(tidyverse)
n <- c(10, 15, 20, 25, 30, 50, 100, 150, 200)
p <- c(0.01, 0.4, 0.8)
nps <- expand.grid(n = n, p = p)
samples <- 10
outlist <- map2(nps$n, nps$p, function(x, y) rbinom(samples, x, y))