你如何计算矩阵列表中特定行的总和?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (77)

我有矩阵中的数据,矩阵存储在列表中,我想要每个矩阵中特定行的总和。

一些示例数据

A1<-matrix(0:9, nrow=5, ncol=2)
A2<-matrix(10:19, nrow=5, ncol = 2)
A3<-matrix(20:29, nrow=5, ncol = 2)
Mylist<-list(A1, A2, A3)

我可以得到每个矩阵中所有行的总和

lapply(Mylist, function(x) apply(x, 1, sum) )

但我只想要一个特定的行的总和,可能是第1行,可能是第4行,这取决于我想看什么。我知道我可以从上面的代码生成的结果中读取它,但是我想要一个更清洁的解决方案。

提问于
用户回答回答于

你可以使用purrr:map()

如果你知道输出类型(在这种情况下,似乎是所有整数),你可以更具体,比如map_int()。随着map()你会得到一个列表,并带有一个特定的map版本,例如map_int(),你会得到一个向量。

library(tidyverse)

ix <- 3 # let's say we want the sum of the third row

map_int(Mylist, ~sum(.x[ix, ]))
[1] 9 29 49

如果你关心的行索引每个矩阵发生更改,你可以map2()改为使用两个相同长度的输入:

ixs <- c(1, 2, 3)

map2_int(Mylist, ixs, ~sum(.x[.y, ]))
[1]  5 27 49

或者,如果你需要在基本R中工作,你可以只需要获取所需的索引(此处ixsum(),你不需要apply()在里面lapply()

lapply(Mylist, function(x) sum(x[ix, ]))

[[1]]
[1] 9

[[2]]
[1] 29

[[3]]
[1] 49
用户回答回答于
one.row.sum <- function(df, row.num) lapply(Mylist, function(df) sum(df[row.num, ]))

one.row.sum(Mylist, 1)
[[1]]
[1] 5

[[2]]
[1] 25

[[3]]
[1] 45

扫码关注云+社区

领取腾讯云代金券