分配"稀疏" R

时间:2016-12-15 12:20:20

标签: r matrix sparse-matrix

我想将空值或稀疏值分配给R中的稀疏矩阵。具体来说,我想从Matrix包中删除稀疏矩阵对角线中的所有值。 我目前只能将非稀疏的0分配给对角线,然后用drop0函数删除它们。

有没有办法将空值直接分配到稀疏矩阵的对角线?

以下代码演示了此问题:

    library(Matrix)
    m       <- Diagonal(10) 
    diag(m) <- 0
    m
    drop0(m)

我想跳过drop0(m)步骤。 在我的实际分析中,我有非对角线值,我想保留用于网络分析,所以我对空矩阵并不感兴趣,而是分配&#34;稀疏&#34;或&#34;空&#34;将值转换为稀疏矩阵。

1 个答案:

答案 0 :(得分:1)

我假设您确实有一个类ddiMatrix的矩阵,并且想要创建一个空矩阵:

m1 <- as(m, "generalMatrix")
m1@i <- integer(0)
m1@p <- m1@p * 0L
m1@x <- numeric(0)
#10 x 10 sparse Matrix of class "dgCMatrix"
#                         
# [1,] . . . . . . . . . .
# [2,] . . . . . . . . . .
# [3,] . . . . . . . . . .
# [4,] . . . . . . . . . .
# [5,] . . . . . . . . . .
# [6,] . . . . . . . . . .
# [7,] . . . . . . . . . .
# [8,] . . . . . . . . . .
# [9,] . . . . . . . . . .
#[10,] . . . . . . . . . .

当然,您也可以简单地构造一个具有这些维度的新的空稀疏矩阵。

如果您的CsparseMatrix具有非对角线值,请将其强制转换为TsparseMatrix并移除所有ijx值,其中i == j(或跳过强制并计算ip中我认为困难的正确指数。

m1 <- as(m, "generalMatrix")

m2 <- as(m1, "TsparseMatrix")

del <- m2@i == m2@j
m2@i <- m2@i[!del]
m2@j <- m2@j[!del]
m2@x <- m2@x[!del]