Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add each element in one vector with each element in a second vector

Tags:

r

I would like to add each element in one vector with each element in another vector as follows, but avoid the for loops. Is there a simple method?

vadd <- function(vrow, vcol){
vmatrix <- matrix(nrow = length(vrow), ncol = length(vcol))
for(r in 1:length(vrow)){#rows
    for(c in 1:length(vcol)){#columns
        vmatrix[r, c] <- vrow[r] + vcol[c]
    }
}
return(vmatrix)
}

a <- c(1:10)
b <- c(3:4)
vadd(a, b)

Sincerely, Brian

like image 453
Brian Avatar asked Dec 03 '22 09:12

Brian


2 Answers

What you are looking for is outer(), as in:

> outer(a, b, "+")
      [,1] [,2]
 [1,]    4    5
 [2,]    5    6
 [3,]    6    7
 [4,]    7    8
 [5,]    8    9
 [6,]    9   10
 [7,]   10   11
 [8,]   11   12
 [9,]   12   13
[10,]   13   14
like image 136
Gavin Simpson Avatar answered Dec 05 '22 22:12

Gavin Simpson


You can put b in a matrix and take advantage of R's recycling rules:

a + matrix(b, nrow=length(a), ncol=2, byrow=TRUE)
like image 20
Joshua Ulrich Avatar answered Dec 05 '22 23:12

Joshua Ulrich