我有以下问题:
我有一个长度为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初学者,所以也许答案很简单,但我无法弄清楚要搜索哪些内容可以帮助我......
答案 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)
很好,因为"*"
运算符是矢量化的。