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



所以我是矩阵和函数的新手,我正在努力研究如何应用函数来计算多个矩阵的列均值。

以下是一些伪集市:

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)

我有13个大矩阵,都是不同的变量,但它们都有相同的维度。我想得到每个矩阵的列的平均值。我已经想出了如何为一个单独的矩阵做到这一点:

AA <- sapply(1:3, function(x) mean(A [,x], na.rm = TRUE))

但是,可能有一种更有效的方法可以将其应用于我的所有矩阵,而不是将其写十几次并获得单独的输出,即每个矩阵的列平均值?我看过一些使用矩阵列表的工作——这是正确的路线吗?如果这是重复的,我很抱歉,我试图找到一个正确答案的清晰例子,但没有成功(请随时为我指明正确的方向(。

我们将矩阵保存在list中,使用vapply循环通过list并获得colMeans

vapply(list(A, B), colMeans, numeric(3))
#      [,1] [,2]
#[1,]    2    8
#[2,]    5    5
#[3,]    8    2

或使用aggregate

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

不同的方式可以用于不同的目的。它也可以是一组通过操作

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

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

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

我看到了一些使用矩阵列表的工作-这是正确的路线吗?

是的,我认为这是针对您正在努力实现的目标而推荐的。

最新更新