Как добавить векторы разной длины? - PullRequest
2 голосов
/ 06 июня 2019

Я пытаюсь добавить два вектора.

  • это 41, 5
  • b = 28, 5, 3, 1

Я пытался просто сделать это

c <- a + b

Ответ вышел как 69, 10, 44, 6. Я предполагаю, что он использовал повторно?

Я хочу, чтобы c было 69, 10, 3, 1 после добавления a и b вместе.

У меня вообще нет опыта работы с R, поэтому, пожалуйста, оставьте решение простым. Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 06 июня 2019

Другая возможность может быть:

c(a, rep(0, length(b) - length(a))) + b

[1] 69 10  3  1
3 голосов
/ 06 июня 2019

Это связано с утилизацией.Мы можем предотвратить это, оставив длины одинаковыми, но добавив 0 *

a1 <- `length<-`(a, length(b))
replace(a1, is.na(a1), 0) + b
#[1] 69 10  3  1

Или, если имеется несколько векторов, поместите его в list, установите длину программно и используйте rowSums, которыйтакже имеют параметр na.rm

lst1 <- list(a, b)
rowSums(sapply(lst1, `length<-`, max(lengths(lst1))), na.rm = TRUE)
#[1] 69 10  3  1
0 голосов
/ 06 июня 2019

Когда вы добавляете два вектора разных размеров, R перерабатывает тот, который имеет меньшую длину.См. https://cran.r -project.org / doc / manual / r-release / R-lang.html # Правила переработки .Одним из решений является заполнение более короткого нулями, как в ответе tmfmnk.

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