Последовательная сумма списка векторов - PullRequest
0 голосов
/ 08 ноября 2018

Пусть x, y и z - векторы одинаковой длины. Предположим, что я хотел бы суммировать их последовательно, то есть x +y, затем x+y+z. Предположим, у меня есть список из 20 векторов. Есть ли простой способ сделать это?

 x <- c(1,2,3,45)
 y <- c(2,31,31,4)
 z <- c(3,4,54,6)

Вот мой ожидаемый результат:

>  s <- x+y
> s
[1]  3 33 34 49

>  z+s
[1]  6 37 88 55

1 Ответ

0 голосов
/ 08 ноября 2018

Вот возможный маршрут. Поместите ваши векторы в список и установите их длину одинаковой. Вы можете достичь этого, добавив NA ко всем векторам, чтобы получить ту же самую длину вектора, что и максимальная. Вы можете использовать Reduce с аргументом accumulate = TRUE для последовательного применения функции, т.е.

l1 <- list(x, y, z)
l1 <- lapply(l1, `length<-`, max(lengths(l1)))

Reduce(`+`, l1, accumulate = TRUE)
#[[1]]
#[1]  1  2  3 45 34

#[[2]]
#[1]  3 33 34 49 NA

#[[3]]
#[1]  6 37 88 55 NA

ПРИМЕЧАНИЕ: Если ваши векторы имеют одинаковую длину, вы можете просто поместить их в список и перейти непосредственно к Reduce, т.е. Reduce(`+`, list(x, y, z), accumulate = TRUE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...