5

3 つのマトリックスを含むリストがあります。

a<-matrix(runif(100))
b<-matrix(runif(100))
c<-matrix(runif(100))

mylist<-list(a,b,c)

3 つの行列の各要素の平均を取得したいと思います。

私は試しました:aaply(laply(mylist, as.matrix), c(1, 1), mean)しかし、これは各要素の平均を取るのではなく、各行列の平均を返しますrowMeans()

4

2 に答える 2

17

多分あなたが欲しいのは:

> set.seed(1)
> a<-matrix(runif(4)) 
> b<-matrix(runif(4))
> c<-matrix(runif(4))
> mylist<-list(a,b,c)  # a list of 3 matrices 
> 
> apply(simplify2array(mylist), c(1,2), mean)
          [,1]
[1,] 0.3654349
[2,] 0.4441000
[3,] 0.5745011
[4,] 0.5818541

apply 呼び出しの vectorc(1,2)は、関数が行と列に (両方同時に) 適用されることを示します。詳細については、を参照してください。MARGINmean?apply

別の代替手段はReduce関数を使用することです

> Reduce("+", mylist)/ length(mylist)
          [,1]
[1,] 0.3654349
[2,] 0.4441000
[3,] 0.5745011
[4,] 0.5818541
于 2013-09-01T12:03:50.833 に答える
-1

あなたの質問は明確ではありません。

各行列のすべての要素の平均:

sapply(mylist, mean)

各行列のすべての行の平均:

sapply(mylist, rowMeans)

各行列のすべての列の平均について:

sapply(mylist, colMeans)

sapply可能であれば、結果をベクトルまたは行列に自動的に単純化することに注意してください。最初のケースでは、結果はベクトルになりますが、2 番目と 3 番目のケースでは、リストまたは行列になる場合があります。

例:

a <- matrix(1:6,2,3)
b <- matrix(7:10,2,2)
c <- matrix(11:16,3,2)
mylist <- list(a,b,c)

> mylist
[[1]]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

[[2]]
     [,1] [,2]
[1,]    7    9
[2,]    8   10

[[3]]
     [,1] [,2]
[1,]   11   14
[2,]   12   15
[3,]   13   16

結果:

> sapply(mylist, mean)
[1]  3.5  8.5 13.5

> sapply(mylist, rowMeans)
[[1]]
[1] 3 4

[[2]]
[1] 8 9

[[3]]
[1] 12.5 13.5 14.5

> sapply(mylist, colMeans)
[[1]]
[1] 1.5 3.5 5.5

[[2]]
[1] 7.5 9.5

[[3]]
[1] 12 15
于 2013-09-01T12:48:10.440 に答える