每个元素与每个元素的总和

时间:2012-09-13 13:43:48

标签: r

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

例如,该矩阵的第一行中的第一个元素是向量1的第一个元素和向量2的第一个元素之和;第一行的第二个元素是向量1的第一个元素和向量2的第二个元素的总和,依此类推。

我尝试过:

u <- c(1,2,3)
v <- c(4,5,6)

A <- matrix( c(1:6), 3, 3 )

for(i in 1:3)
{
   for(j in 1:3)
   {
      A[j][i] <- u[i]+v[j]
   }
}

但我收到一些警告:

Warning messages:
1: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
2: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
3: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
4: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
5: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length
6: In A[j][i] <- u[i] + v[j] :
  number of items to replace is not a multiple of replacement length

有人能帮助我吗?

2 个答案:

答案 0 :(得分:6)

这就是你要这样做的(注意矩阵子集不是两个括号,而是以逗号分隔):

u <- c(1,2,3)
v <- c(4,5,6)

A <- matrix( c(1:6), 3, 3 )

for(i in 1:3)
{
   for(j in 1:3)
   {
      A[i,j] <- u[i]+v[j]
   }
}

但这不是知道R会接近它的人的方式。通常,在R中有比嵌套for循环更好的方法。另一种方式是:

A <- outer(u,v,`+`)

答案 1 :(得分:1)

我们也可以使用sapply

sapply(u, `+`, v)