R — суммировать каждый элемент в векторе с каждым элементом другого вектора

#r #vector

#r #вектор

Вопрос:

У меня есть два вектора, и я хочу новый вектор, элементы которого являются суммой элемента вектора 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 Есть идеи?

Комментарии:

1. зачем вложенные циклы, если это может быть достигнуто простым v1 v2

2. d не определено, и вы присваиваете NULL его m каждый раз, когда выполняете цикл. Вероятно, поэтому вы получаете этот результат.

3. Вы перезаписываете n снова и снова.

Ответ №1:

Возможно, нам нужно

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

Или просто

 v1   v2
  

Или может быть outer

 outer(v1, v2, FUN = " ")
  

Ответ №2:

Если вы хотите исправить свой код, вы можете попробовать что-то вроде этого:

 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