R:在rbinom上使用lapply,其中包含不同的prob参数

时间:2016-07-31 12:21:39

标签: r lapply

我有以下问题:

我有一个长度为n的数组X,其中包含一些正数。 我现在想构建一个第二个数组Y,它应该包含来自bernoulli分布的随机数,但每次成功的概率都是m(X [i],theta)。

我可以在for循环中执行此操作,但我想知道是否可以在一行中执行此操作。

我尝试过类似的事情:

X = sample(c(seq(20)), replace = TRUE)
m<-function(x,theta) return(x*theta)
Y = lapply(lapply(X, m, theta=2), rbinom, n=1, size=1)

但它不能用我试过的形式。

我是一个真正的R初学者,所以也许答案很简单,但我无法弄清楚要搜索哪些内容可以帮助我......

1 个答案:

答案 0 :(得分:2)

我正在将您的代码翻译成

X <- sample(c(seq(20)), replace = TRUE)
m <- function(x,theta) return(x*theta)
prob  <- lapply(X, m, theta=2)
Y = unlist(lapply(prob, rbinom, n=1, size=1))

目前,我们为NA获取了所有Y。但是,如果prob是合适的,那么您的代码没有任何问题。例如,

prob <- 1:10 / 10
Y = unlist(lapply(prob, rbinom, n=1, size=1))

正在给出有意义的结果。

请注意,无需使用lapply来获取prob。只需做

prob <- m(X, theta)

很好,因为"*"运算符是矢量化的。