0

使用 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)。

我的目标是构建一个可以计算所有这些场景的函数,从而阻止我单独完成所有这些场景。

4

2 回答 2

1

以下函数将为您提供列表列表。我试图给他们适当的命名。

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 的列表(对于每个概率)以及来自伯努利样本的向量。

于 2020-11-15T14:05:36.690 回答
0

您可以生成一个dataframenp 组合,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))
于 2020-11-15T15:29:22.540 回答