首页 > 解决方案 > 将列表元素添加到矩阵各列中的每一行

问题描述

我有一个包含 i 行和 j 列的矩阵。

class(matrix)
#[1] "Incomplete"

attr(,"package")
#[1] "softImpute"

我还有一个包含 j 元素的值列表。

我想将每个 j 元素添加到矩阵中相应的 j 列。

矩阵:(1,1) = 1.6,(1,2) = 1.5 和 (2,1) = 2.1。

例如,如果我的列表 = [1,2,3],则矩阵更新为:

(1,1) = 1.6+1=2.6

(1,2) = 1.5+2=3.5

(2,1) = 1.1+1 = 2.1

我试过这个但不起作用:

for (i in length(list)) {
  matrix_updated[,i] <- matrix[,i] + list[i]
}

在此处输入图像描述

标签: r

解决方案


我想你正在寻找sweep()

mat <- matrix(c(1.6, 1.1, 0.9, 1.5, 1.2, 0.8, 1.9, 1.3, 0.7), 3, 3)
lst <- list(1,2,3)

sweep(mat, MARGIN = 2, STATS = unlist(lst), FUN = '+')

     [,1] [,2] [,3]
[1,]  2.6  3.5  4.9
[2,]  2.1  3.2  4.3
[3,]  1.9  2.8  3.7

并且要修复您的原始功能,您需要使用[[从列表中提取第一个元素:

matrix_updated <- mat

for (i in seq_len(length(lst))) {
  matrix_updated[,i] <- mat[,i] + lst[[i]]
}
matrix_updated

另外,请不要命名您的变量matrixlist. 它们也是中的函数。


推荐阅读