65

各要素が 5*5 の行列であるリストがあります。例えば

[[1]]   
           V1          V2          V3          V4          V5      
      [1,]   0.000000   46.973700   21.453500  338.547000   10.401600 
      [2,]  43.020500    0.000000  130.652000  840.526000   56.363700 
      [3,]  12.605600  173.238000    0.000000  642.075000   19.628100 
      [4,] 217.946000  626.368000  481.329000    0.000000  642.341000 
      [5,] 217.946000  626.368000  481.329000    0.000000  642.341000 
[[2]]   
           V1          V2          V3          V4          V5      
      [1,]   0.000000   47.973700   21.453500  338.547000   10.401600 
      [2,]  143.020500    0.000000  130.652000  840.526000   56.363700 
      [3,]  312.605600  17.238000    0.000000  642.075000   19.628100 
      [4,]  17.946000  126.368000  481.329000    0.000000  642.341000
      [5,] 217.946000  626.368000  481.329000    0.000000  642.341000  
...

適用のような関数を使用して行列 [1] を [n] に合計し、結果として 5*5 行列を返すにはどうすればよいですか (各要素は、リスト内の各行列の対応する要素の合計です)。

4

3 に答える 3

113

を使用しReduceます。

## dummy data

.list <- list(matrix(1:25, ncol = 5), matrix(1:25, ncol = 5))

Reduce('+', .list)
##       [,1] [,2] [,3] [,4] [,5]
## [1,]    2   12   22   32   42
## [2,]    4   14   24   34   44
## [3,]    6   16   26   36   46
## [4,]    8   18   28   38   48
## [5,]   10   20   30   40   50
于 2012-07-25T02:20:40.977 に答える
14

@mnelの答えの方が効率的だと思いますが、これは別のアプローチです:

apply(simplify2array(.list), c(1,2), sum)

    [,1] [,2] [,3] [,4] [,5]
[1,]    2   12   22   32   42
[2,]    4   14   24   34   44
[3,]    6   16   26   36   46
[4,]    8   18   28   38   48
[5,]   10   20   30   40   50
于 2012-07-25T16:11:52.840 に答える
5

あなたはdo.callいくつかのモンキーであなたをすることができますが、それは雄弁さを失います:

.list <- list(matrix(1:25, ncol=5), matrix(1:25,ncol=5), matrix(1:25,ncol=5))

x <- .list[[1]]
lapply(seq_along(.list)[-1], function(i){
    x <<- do.call("+", list(x, .list[[i]]))
})
x
于 2012-07-25T02:56:11.423 に答える