1

prob50個の要素のリストがあります。各要素は確率の601x3行列であり、その各行は完全なサンプル空間を表します(つまり、各行列の各行の合計は1になります)。たとえば、次の最初の要素の最初の5行は次のprobとおりです。

> prob[[1]][1:5,]

           [,1]      [,2]       [,3]
 [1,] 0.6027004 0.3655563 0.03174335
 [2,] 0.6013667 0.3665756 0.03205767
 [3,] 0.6000306 0.3675946 0.03237481
 [4,] 0.5986921 0.3686131 0.03269480
 [5,] 0.5973513 0.3696311 0.03301765

ここで、私がやりたいのは、リスト内の各行列/要素の各行に対してprob次の行列を作成することです。最初の行を取得して、a = .603、b = .366、およびc = .032(小数点以下第3位に四捨五入)とします。それで、

> w
         [,1]       [,2]       [,3]
 [1,] a*(1-a)       -a*b       -a*c
 [2,]    -b*a    b*(1-b)       -b*c
 [3,]    -c*a       -c*b    c*(1-c)

そのような:

> w
           [,1]       [,2]       [,3]
 [1,]  0.239391  -0.220698  -0.019296
 [2,] -0.220698   0.232044  -0.011712
 [3,] -0.019296  -0.011712   0.030976

同様の3x3行列を600回(この行列の残りの行に対して)取得してから、このプロセス全体をの残りの要素に対して49回繰り返したいと思いますprob。私が考えることができる唯一のことは、各マトリックスの各行に一度に1つずつアクセスするようにapply内部を呼び出すことです。lapplyこれを行うためのエレガントな方法ではないと確信していますが(言うまでもなく、それを機能させることはできません)、他に何も考えられません。誰かがこれで私を助けることができますか?また、別の構造を使用するための提案を聞きたいです(たとえば、リスト内で行列を使用するのは悪いですか?)。

4

1 に答える 1

1

lapply同様の次元の行列のリストでこのプロセスを実行するのは非常に簡単です。それが課題を表す場合は、dput(.)同様のマトリックスを持つ2要素リストの出力を投稿する必要があります。課題は、実際には行ごとに処理を行うことです。これは、出力が3x3xN配列である場合にここに示されています。

w <- apply(M, 1, function(rw) diag( rw*(1-rw) ) + 
                    rbind( rw*c(0, -rw[1], -rw[1] ), 
                           rw*c(-rw[2],0, -rw[2] ),
                           rw*c(-rw[3], -rw[3], 0)
         )

 )
 w
             [,1]        [,2]        [,3]        [,4]        [,5]
 [1,]  0.23945263  0.23972479  0.23999388  0.24025987  0.24052272
 [2,] -0.22032093 -0.22044636 -0.22056801 -0.22068575 -0.22079962
 [3,] -0.01913173 -0.01927842 -0.01942588 -0.01957412 -0.01972314
 [4,] -0.22032093 -0.22044636 -0.22056801 -0.22068575 -0.22079962
 [5,]  0.23192489  0.23219793  0.23246881  0.23273748  0.23300395
 [6,] -0.01160398 -0.01175156 -0.01190081 -0.01205173 -0.01220435
 [7,] -0.01913173 -0.01927842 -0.01942588 -0.01957412 -0.01972314
 [8,] -0.01160398 -0.01175156 -0.01190081 -0.01205173 -0.01220435
 [9,]  0.03073571  0.03102998  0.03132668  0.03162585  0.03192748

 w <- array(w, c(3,3,5) )
 w
, , 1

            [,1]        [,2]        [,3]
[1,]  0.23945263 -0.22032093 -0.01913173
[2,] -0.22032093  0.23192489 -0.01160398
[3,] -0.01913173 -0.01160398  0.03073571

, , 2

            [,1]        [,2]        [,3]
[1,]  0.23972479 -0.22044636 -0.01927842
[2,] -0.22044636  0.23219793 -0.01175156
[3,] -0.01927842 -0.01175156  0.03102998

.... snipped remaining output
于 2012-12-04T16:52:43.553 に答える