2016-07-31 40 views
0

我有以下問題:R:在不同的參數上使用lapply的概率

我有一個長度爲n的數組X,其中包含一些正數。 我現在想要構造第二個數組Y,它應該包含來自伯努利分佈的隨機數,但每次成功的概率都是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) 

,但它不能在一個形式我想工作。

我是一個REAL R初學者,所以也許答案很簡單,但我想不出該怎麼尋找找到的東西,可以幫助我......

+1

我知道。我想用一些更簡單的東西來讓它工作,但我想這是問題... –

+0

@JenniferGroß你的函數'm'返回一個大於1的值。所以,改變你的函數。另外,你可以顯示工作'for'循環嗎? – akrun

+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)) 

目前我們所有的NAY。但是,如果prob是合適的,那麼代碼沒有任何問題。例如,

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

給出有意義的結果。

請注意,沒有必要使用lapply來獲得prob。只需做

prob <- m(X, theta) 

很好,因爲"*"運算符是向量化的。

+0

謝謝,現在它正在工作。我感謝 –

+3

'rbinom(n = length(prob),size = 1,prob = prob)' – Roland