R-将向量中的每个元素与其他向量的每个元素相加

时间:2016-10-13 03:13:04

标签: r vector

我有两个向量,我想要一个新的向量,其中元素是向量1的元素和向量2的元素的总和。

v1<-c(1,2,3,4,5,6)
v2<-c(0,1,1,2,2,1)

for(i in 1:length(v1)){
  for(j in 1:length(v2)){
    n<-vector()
    n<-v1[i]+v2[j]
  }
  m<-NULL
  m[n]<-m
}

当我运行循环时,我得到m=NULL,而n是带有NA的数字类。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

也许我们需要

tapply(c(v1, v2), c(v1, v2), FUN = sum)

或者只是

v1 + v2

或者可能是outer

outer(v1, v2, FUN = "+")

答案 1 :(得分:0)

如果您想更正代码,可以尝试以下方法:

v1<-c(1,2,3,4,5,6)
v2<-c(0,1,1,2,2,1)

m<-matrix(rep(0,length(v1)*length(v2)), nrow=length(v1))
for(i in 1:length(v1)){
  for(j in 1:length(v2)){
    m[i,j] <- v1[i]+v2[j]
  }
}
m
      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    2    3    3    2
[2,]    2    3    3    4    4    3
[3,]    3    4    4    5    5    4
[4,]    4    5    5    6    6    5
[5,]    5    6    6    7    7    6
[6,]    6    7    7    8    8    7

这也可以这样做

outer(v1, v2, FUN='+')

或以这种方式

matrix(apply(expand.grid(1:length(v1), 1:length(v2))[2:1], 1, 
                         function(x)v1[x[1]]+v2[x[2]]), nrow=length(v1), byrow=TRUE)
      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    2    3    3    2
[2,]    2    3    3    4    4    3
[3,]    3    4    4    5    5    4
[4,]    4    5    5    6    6    5
[5,]    5    6    6    7    7    6
[6,]    6    7    7    8    8    7