[英]How to apply a function on every element of all elements in a list in R
我有一个包含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
一种实现此目的的概念方法是对矩阵求和,然后取每个条目的平均值。 尝试使用Reduce
:
Reduce('+', c) / length(c)
输出:
[,1] [,2]
[1,] 3 5
[2,] 4 6
演示在这里:
另一种选择是构造一个数组,然后使用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
更加灵活,因为您可以交换出更多的功能,但是对于特定的应用程序,它会更慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.