求多个同维矩阵的均值的有效方法是什么?如果A,B是2 × 2矩阵,那么,
A 2 3 4 5 B 6 7 8 9
平均值(A,B)应给予
4 5 6 7
简单的方法是执行(A + B +......)/num个矩阵。(并显式处理NA值)有没有其他优雅的方法或库来做这件事(在na.rm的支持下)?
xsuvu9jc1#
将它们组合成一个数组并使用apply:
apply
A <- matrix(c(2,4,3,5), 2) B <- matrix(c(6,8,7,9), 2) X <- list(A, B) Y <- do.call(cbind, X) Y <- array(Y, dim=c(dim(X[[1]]), length(X))) apply(Y, c(1, 2), mean, na.rm = TRUE) # [,1] [,2] #[1,] 4 5 #[2,] 6 7
如果apply的效率不够高,可以将colMeans(提供NA处理)与aperm一起使用:
colMeans
NA
aperm
colMeans(aperm(Y, c(3, 1, 2)), na.rm = TRUE) # [,1] [,2] #[1,] 4 5 #[2,] 6 7
izj3ouym2#
Reduce
Reduce(`+`, x) / length(x)
我认为现在有一个更好的解决方案,多亏了purrr::reduce。
purrr::reduce
require(purrr) x = list(volcano+10, volcano-15, volcano-5) v = reduce(x, `+`) / length(x) image(v)
uttx8gqw3#
如果希望结果是具有相同列名和行名称的矩阵,可以创建一个函数将矩阵列表传递到。还可以将应用的函数从mean更改为sd或任何其他函数。
reduceApplyListOfArrays<- function(x){ y<-apply(array(unlist(x), c(dim(x[[1]]), dim(x[[2]]), length(x))), c(1,2), mean) colnames(y)<-colnames(x[[1]]) rownames(y)<-rownames(x[[1]]) return(y) }
bvjxkvbb4#
简单的解决办法是
A <- matrix(c(2,4,3,5), 2) B <- matrix(c(6,8,7,9), 2) (A+B)/2
得到了与“罗兰解”相同的结果
4条答案
按热度按时间xsuvu9jc1#
将它们组合成一个数组并使用
apply
:如果
apply
的效率不够高,可以将colMeans
(提供NA
处理)与aperm
一起使用:izj3ouym2#
Reduce
(请在下面的邮件中投票):我认为现在有一个更好的解决方案,多亏了
purrr::reduce
。uttx8gqw3#
如果希望结果是具有相同列名和行名称的矩阵,可以创建一个函数将矩阵列表传递到。还可以将应用的函数从mean更改为sd或任何其他函数。
bvjxkvbb4#
简单的解决办法是
得到了与“罗兰解”相同的结果