2013-03-25 21 views
3

R - 是否有適用於可以爲矩陣的每個條目計算FUN的應用系列的函數?我有概率的n x m矩陣M - M[i, j] = pP(x = 1) = pP(x = 0) = 1 - p,從M樣,我可以用apply
apply(M, 1, function(x)(sample(0:1,length(x), replace = TRUE))) ,但我不知道這是否功能正常工作,因爲我認爲它應該是相當:R - 是否有適用於可以爲矩陣的每個條目計算FUN的應用系列的函數?

apply(M, 1, function(x)(sample(0:1,length(x), replace = TRUE, prob = x))) ,但第二個不起作用,除了有更簡單/更快的解決方案涉及其他apply功能?

例如:

> M=matrix(runif(10*4),10,4) 
> M 
      [,1]  [,2]  [,3]  [,4] 
[1,] 0.4497123 0.74045206 0.8112949 0.33122848 
[2,] 0.5416048 0.35812976 0.3877630 0.01491928 
[3,] 0.7164970 0.15793958 0.1822459 0.07017764 
[4,] 0.7965967 0.85600843 0.3129818 0.25698186 
[5,] 0.8553264 0.06880133 0.4516520 0.14231129 
[6,] 0.8667404 0.49394338 0.1331386 0.37769487 
[7,] 0.9446913 0.87368456 0.3680256 0.92143709 
[8,] 0.4251636 0.69126643 0.5355501 0.45516271 
[9,] 0.7483549 0.04289660 0.7817728 0.37752422 
[10,] 0.0218563 0.91304663 0.4800049 0.19477370 

> apply(M, 1, function(x)(sample(0:1,length(x), replace = TRUE, prob = x))) 
Error in sample(0:1, length(x), replace = TRUE, prob = x) : 
    incorrect number of probabilities 

> apply(M, 1, function(x)(sample(0:1,length(x), replace = TRUE))) 

    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 0 0 1 0 0 1 1 0  0 
[2,] 0 1 0 0 1 1 0 1 1  0 
[3,] 0 1 0 1 1 0 1 1 1  1 
[4,] 0 0 1 1 0 0 1 1 0  1 

回答

9

您可以通過多個維度apply。如果您想通過行採樣和列使用1:2

至於你的採樣從二項式distrution使用rbinom

apply(M, 1:2, rbinom, size =1, n=1) 

     [,1] [,2] [,3] [,4] 
[1,] 0 1 0 0 
[2,] 1 0 0 1 
[3,] 1 0 1 0 
[4,] 1 0 1 0 
[5,] 1 0 0 0 
[6,] 1 0 0 1 
[7,] 0 1 1 0 
[8,] 1 1 0 1 
[9,] 1 0 1 0 
[10,] 0 0 0 1 

在這種情況下rbinom(如在R許多功能),被矢量,而當你傳遞一個矩陣,它會計算每個條目。然後,您必須強制回到您所需的matrix尺寸。

例如

matrix(rbinom(n=length(M),size=1,prob=M), nrow = nrow(M), ncol = ncol(M)) 
+0

我使用的R用快5年了,我從來沒有聽說過「如果你想通過行採樣和列使用1:2」,太好了,謝謝 – Qbik 2013-03-25 22:06:33

+0

@ Qbik它甚至在幫助中提到! – hadley 2013-03-26 13:32:37

+0

@hadley indead ps。我喜歡RStudio – Qbik 2013-04-02 21:40:33

相關問題