Как рассчитать сумму конкретной строки в списке матриц - PullRequest
0 голосов
/ 29 мая 2018

У меня есть данные в матрицах, и матрицы хранятся в списке, и я хочу получить сумму определенной строки в каждой матрице.

некоторые примеры данных

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)

Iможно получить сумму всех строк в каждой матрице с помощью

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

, но мне нужна только сумма конкретной строки, может быть строка 1, может быть строка 4, в зависимости от того, что я хочу посмотреть.Я знаю, что могу прочитать его по результатам, сгенерированным с помощью приведенного выше кода, но я хочу более чистое решение, которое дает мне только результаты.Спасибо

Ответы [ 2 ]

0 голосов
/ 29 мая 2018
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
0 голосов
/ 29 мая 2018

Вы можете использовать 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, вы можете просто взятьжелаемый индекс (здесь ix) sum(), вам не нужно apply() внутри lapply():

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

[[1]]
[1] 9

[[2]]
[1] 29

[[3]]
[1] 49
...