【问题标题】:How to find the sum of all the first columns of matrices in a list using lapply function in R?如何使用R中的lapply函数查找列表中所有第一列矩阵的总和?
【发布时间】:2018-06-16 04:09:40
【问题描述】:

假设我有一个包含 3 个矩阵的列表。我无法弄清楚如何找到每个矩阵的第一列的总和并得到结果。

Eg:
A=matrix(c(1:4),nrow=2,ncol=2)
B=matrix(c(5:8),nrow=2,ncol=2)
C=matrix(c(9:12),nrow=2,ncol=2)

MyList=list(A,B,C)

The list is:
[[1]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

[[2]]
     [,1] [,2]
[1,]    5    7
[2,]    6    8

[[3]]
     [,1] [,2]
[1,]    9   11
[2,]   10   12

我想使用 lapply 从每个矩阵中找到第一列元素的总和。 预期结果: 3,11,19 (当然是列表格式)

【问题讨论】:

  • 试试lapply(MyList, function(x) sum(x[,1]))
  • @akrun,谢谢你这工作。但你能解释一下代码吗?第二个参数是干什么用的?抱歉,但我在 R 中不是很擅长,我正在尝试了解“应用”系列的工作原理。
  • lapply遍历列表,使用匿名函数,提取第一列x[,1]并得到它的sum
  • 抱歉,还有一个问题。现在我将如何使用我的“自己创建的函数(用户定义的函数)”然后在 lapply 中使用它?假设,现在我想找到每个矩阵中第一列的乘积。

标签: r list matrix apply lapply


【解决方案1】:

使用purrr 包你可以运行以下代码:

您的数据:

A=matrix(c(1:4),nrow=2,ncol=2)
B=matrix(c(5:8),nrow=2,ncol=2)
C=matrix(c(9:12),nrow=2,ncol=2)

创建一个列表:

mylist <- list(A,B,C)

然后使用colSums 函数运行map,该函数按列生成总和。再次使用map,您可以提取第一个元素,即按第一列求和:

library(purrr)
mylist %>% 
    map(colSums) %>% 
    map(1)

这是输出:

[[1]]
[1] 3

[[2]]
[1] 11

[[3]]
[1] 19

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2019-08-12
    相关资源
    最近更新 更多