#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