2016-08-02 51 views
2

我想同時使用rbeta中不同參數值的向量,得出一個長度爲n向量元素總和的向量。例如,rbeta中不同n值的向量

n <- c(10, 20, 30) 
alpha <- c(1,2,3) 
beta <- c(3,2,1) 
rbeta(n, alpha, beta) 

底線不符合我的意願。我希望輸出是一個長度爲10 + 20 + 30 = 60的向量,前10個元素是來自beta(1,3)的10個樣本,來自beta(2,2)的下20個元素和下一個來自beta(3,1)的30個元素。做這個的最好方式是什麼?

+2

'rbeta(sum(n),2,1)'.....? – joran

回答

2

一般適用於一個向量的元素的功能時,你需要lapply在你輸入向量:

unlist(lapply(n, rbeta, 2, 1) 

然而,在你的情況,你可以簡單地sum所有n S:

rbeta(sum(n), 2, 1) 

如果你有多個參數alphabeta,你可以使用Map代替(小心,參數進行比較倒):

unlist(Map(rbeta, n, alpha, beta)) 
+0

謝謝你,但我意識到我的問題不夠詳細,所以我編輯了它。在我的情況下,我實際上會需要不同的alpha和beta值,所以我不能只求n個向量。 –

+0

@SarahK在這種情況下,'lapply'或其姐妹'mapply'是你的朋友。 –

+1

你還需要注意'mapply'的'SIMPLIFY'參數,如果你碰巧有一個相等的'n'值的向量...... –

1

對於修改後的問題,我認爲明智地使用rep()將使它發揮作用。

n <- c(10, 20, 30) 
alpha <- c(1,2,3) 
beta <- c(3,2,1) 
rbeta(sum(n),rep(alpha,n),rep(beta,n))