R 如何在多个矩阵上有效地应用函数-列的平均值

R 如何在多个矩阵上有效地应用函数-列的平均值,r,matrix,mean,sapply,R,Matrix,Mean,Sapply,因此,我对矩阵和函数是新手,我正在尝试解决如何应用一个函数来计算多个矩阵的列平均值 以下是一些虚拟马蒂斯: A <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3) B <- matrix(c(9,8,7,6,5,4,3,2,1),nrow=3) A我们将矩阵保存在列表中,使用vapply在列表中循环,并获得colMeans vapply(list(A, B), colMeans, numeric(3)) # [,1] [,2] #[1,]

因此,我对矩阵和函数是新手,我正在尝试解决如何应用一个函数来计算多个矩阵的列平均值

以下是一些虚拟马蒂斯:

A <- matrix(c(1,2,3,4,5,6,7,8,9),nrow=3)
B <- matrix(c(9,8,7,6,5,4,3,2,1),nrow=3)

A我们将矩阵保存在
列表中,使用
vapply
列表中循环,并获得
colMeans

vapply(list(A, B), colMeans, numeric(3))
#      [,1] [,2]
#[1,]    2    8
#[2,]    5    5
#[3,]    8    2
或使用
聚合

aggregate(do.call(rbind, list(A, B)), list(rep(1:2, each = 3)), FUN = mean)

或者使用
tidyverse

library(tidyverse)
list(A, B) %>%
      map(~ .x %>%
              as.data.frame %>%
               summarise_all(mean))
#[[1]]
#  V1 V2 V3
#1  2  5  8

#[[2]]
#  V1 V2 V3
#1  8  5  2
tidyverse通道可以链接用于不同的目的。也可以按操作分组

list(A, B) %>%
    map_df(as.data.frame, .id = 'grp') %>%
    group_by(grp) %>%
    summarise_all(mean)
# A tibble: 2 x 4
#  grp      V1    V2    V3
#  <chr> <dbl> <dbl> <dbl>
#1 1         2     5     8
#2 2         8     5     2
列表(A,B)%>%
map_df(as.data.frame,.id='grp')%>%
分组依据(grp)%>%
总结所有(平均值)
#一个tibble:2x4
#grp V1 V2 V3
#     
#1 1         2     5     8
#2 2         8     5     2

创建一个列表,然后对该列表中的每个元素应用
colMeans

lst <- list(A, B)
lapply(lst, colMeans)
#[[1]]
#[1] 2 5 8

#[[2]]
#[1] 8 5 2

lst感谢@akrun提供了深入的答案,结果很好,很高兴看到替代方法。接下来的问题是:如何在tidyverse示例中添加na.rm=True方面?@Lmm您可以添加
summary\u all(mean,na.rm=True)
lst <- list(A, B)
lapply(lst, colMeans)
#[[1]]
#[1] 2 5 8

#[[2]]
#[1] 8 5 2