【问题标题】:Sum each element of a vector with each element of a second vector将向量的每个元素与第二个向量的每个元素相加
【发布时间】:2012-09-06 15:00:52
【问题描述】:

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

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

例如,用这两个向量

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

期望的结果是:

#       [,1] [,2] [,3]
# [1,]    5    6    7
# [2,]    6    7    8
# [3,]    7    8    9

我尝试过的:

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

谁能帮帮我?

【问题讨论】:

  • 请阅读“R 简介”,因为您对类型缺乏一些了解,正如您使用 A 所表明的那样。这不是 C 语言。

标签: r


【解决方案1】:

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

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,`+`)

【讨论】:

    【解决方案2】:

    我们也可以使用sapply

    sapply(u, `+`, v)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多