重置dgCMatrix的值

时间:2012-10-24 21:27:03

标签: r

在R中,我想将dgCMatrix非零值设置为向量。

例如:

这是一个dgCMatrix:

M
3 x 4 sparse Matrix of class "dgCMatrix"

[1,] . 1 . 1
[2,] . . 1 .
[3,] . . 1 .

这是一个矢量:

a <- c(1,2,3,4)

然后,我想按列将非零值设置为向量。结果将是:

[1,] . 2 . 4
[2,] . . 3 .
[3,] . . 3 .

谢谢。

1 个答案:

答案 0 :(得分:2)

这应该非常有效:

library(Matrix)
M <- Matrix(c(0,0,0,1,0,0,0,1,1,1,0,0), nc=4) ## Recreates your dgCMatrix
a <- 1:4

M %*% Diagonal(x=a)
# 3 x 4 sparse Matrix of class "dgCMatrix"
#             
# [1,] . 2 . 4
# [2,] . . 3 .
# [3,] . . 3 .

修改

如果M的某些值不是0和1,则可以改为使用以下值之一:

M <- M * 11:14  ## Alter M to test the following code 

as(M>0 | M<0, "dgCMatrix") %*% Diagonal(x=a)

as(!M==0, "dgCMatrix") %*% Diagonal(x=a)