将列表元素添加到矩阵的相应列中的每一行

时间:2019-11-23 23:22:22

标签: r

我有一个矩阵,其中包含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]
}

enter image description here

3 个答案:

答案 0 :(得分:2)

我认为您正在寻找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。它们也是中的函数。

答案 1 :(得分:1)

以下是使用apiVersion: extensions/v1beta1 kind: Ingress metadata: name: basic-ingress spec: rules: - http: paths: - path: / backend: serviceName: nodejs servicePort: 8000软件包的示例:

想象一下我们有这个初始表:

purrr

这是列表:

library(purrr)

table_IJ <- matrix( round(10 *runif(20)), nrow = 5,ncol = 3)

> table_IJ
     [,1] [,2] [,3]
[1,]    4    7    3
[2,]    5    2    7
[3,]    7    2    2
[4,]    7    4    9
[5,]    3    7    9

更新每列的最后操作如下:

lst <- list(1,2,3)
> lst
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

这基本上将相应的列表元素添加到表的相应列中!

updated_table_IJ <- map2_df(as.data.frame(table_IJ), lst, function(x,y) x + y)

答案 2 :(得分:1)

还有另外两种使用@Cole数据的方法。

根据列lst复制mat的值

mat + unlist(lst)[col(mat)]

#     [,1] [,2] [,3]
#[1,]  2.6  2.5  2.9
#[2,]  3.1  3.2  3.3
#[3,]  3.9  3.8  3.7

或者我们可以使用双重转置方法

t(t(mat) + unlist(lst))