首页 > 解决方案 > 如何将向量添加到R中矩阵的每一列?

问题描述

我有一个称为 r2 的矩阵,对于该矩阵的每一列,我需要添加另一列数据 - 即。我希望结果是第一列的第一个元素 + 第二列的第一个元素;第二个元素+第二个元素;等等。当我分离一列并添加它时,我可以让它工作,但我不能循环遍历矩阵的列。见下文:

这是矩阵 r2:

      [,1]   [,2]   [,3]   [,4]   [,5]   [,6]
[1,] 51.032 45.480 42.638 59.808 40.309 51.135
[2,] 50.591 45.415 47.962 57.020 39.670 52.518
[3,] 55.695 50.099 50.205 63.256 45.174 50.475
[4,] 46.422 44.233 44.322 53.229 34.943 41.707
[5,] 52.357 44.523 44.374 57.014 41.672 53.920
[6,] 53.610 44.448 41.846 60.451 42.163 52.706
[7,] 51.728 44.612 43.305 56.844 39.048 48.710
[8,] 52.790 45.266 43.426 58.365 41.577 54.630

这是我要添加到矩阵每一列的列,称为 BDtool["Constant"]:

-26.701
-29.287
-30.964
-24.246
-29.194
-30.444
-26.524
-29.771

此代码用于将 r2 列添加到 Constant 列:

r3 <- r2[,1]+BDtool["Constant"]

结果如下:

[1,]   24.434
[2,]   23.231
[3,]   19.511
[4,]   17.461
[5,]   24.726
[6,]   22.262
[7,]   22.186
[8,]   24.859

这正是我想要的。但是,我无法让任何类型的 for 循环工作。我只想遍历 r2 中的每一列,并且对于每一列,得到一个类似上面的输出。我摆弄了各种版本的:

r3 <- for (i in r2[,1:6]) {
    i +BDtool["Constant"]
}

但 r3 总是以 NULL 结尾。我如何使这项工作?感谢您提供的任何建议!

标签: rfor-loopmatrixaddition

解决方案


您可以使用r3 <- r2 + BDtool$Constant

这是因为 R 的回收特性。BDtool$Constant首先将其添加到矩阵的第一列,r2然后将其中的值BDtool$Constant回收并再次用于第二列,依此类推用于所有其他列。

这个简化的例子可能有助于澄清 -

r2 <- matrix(1:18, 6, 3)
v <- 1:6
r2 + v
#     [,1] [,2] [,3]
#[1,]    2    8   14
#[2,]    4   10   16
#[3,]    6   12   18
#[4,]    8   14   20
#[5,]   10   16   22
#[6,]   12   18   24

推荐阅读