Как добавить два вектора, не повторяясь в R?

У меня есть два вектора в R другого размера, и я хочу добавить их, но не повторяя более короткий - вместо этого, я хочу, чтобы "недостающие" числа были, обнуляет.

Пример:

x<-c(1,2)
y<-c(3,4,5)
z<-x+y 

Теперь, z 4 6 6, но я хочу это только 4 6 5.

7
задан jogo 20 January 2016 в 13:53
поделиться

1 ответ

Я бы сделал их равной длины, а затем сложил бы их:

> length(x) <- length(y)
> x
[1]  1  2 NA
> x + y
[1]  4  6 NA
> x[is.na(x)] <- 0
> x + y
[1] 4 6 5

Или, как функцию:

add.uneven <- function(x, y) {
    l <- max(length(x), length(y))
    length(x) <- l
    length(y) <- l
    x[is.na(x)] <- 0
    y[is.na(y)] <- 0
    x + y
}

> add.uneven(x, y)
[1] 4 6 5

Учитывая, что вы просто складываете два вектора, может быть более интуитивно понятным работать с ним следующим образом:

> `%au%` <- add.uneven
> x %au% y
[1] 4 6 5

Вот еще одно решение, использующее rep:

x <- c(x, rep(0, length(y)-length(x)))
x + y
13
ответ дан 6 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: