我有一个包含R中相同大小的矩阵的列表。我想在所有矩阵的同一元素上应用一个函数。示例:
> a <- matrix(1:4, ncol = 2)
> b <- matrix(5:8, ncol = 2)
> c <- list(a,b)
> c
[[1]]
[,1] [,2]
[1,] 1 3
[2,] 2 4
[[2]]
[,1] [,2]
[1,] 5 7
[2,] 6 8
现在我想应用均值函数,并希望得到一个像这样的矩阵:
[,1] [,2]
[1,] 3 5
[2,] 4 6
答案 0 :(得分:5)
这样做的一种概念性方法是总结矩阵,然后取每个条目的平均值。尝试使用Reduce
:
Reduce('+', c) / length(c)
<强>输出:强>
[,1] [,2]
[1,] 3 5
[2,] 4 6
在这里演示:
答案 1 :(得分:0)
另一个选择是构造一个数组,然后使用apply
。
第1步:构建数组。
使用abind
库和do.call
,您可以执行以下操作:
library(abind)
myArray <- do.call(function(...) abind(..., along=3), c)
使用base R,您可以去除结构,然后像这样重建它:
myArray <- array(unlist(c), dim=c(dim(a), length(c)))
在这两种情况下,它们都会返回所需的数组
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
第2步:使用apply
计算第一维和第二维的平均值。
apply(myArray, 1:2, mean)
[,1] [,2]
[1,] 3 5
[2,] 4 6
这比Reduce
更灵活,因为你可以换掉更多的函数,但对于这个特定的应用程序它会更慢。