将 "sparse" 值分配给 R 中稀疏矩阵的对角线

Assign "sparse" values to the diagonal of a sparse Matrix in R

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

有没有办法将空值直接赋给稀疏矩阵的对角线?

下面的代码演示了这个问题:

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

我想跳过 drop0(m) 步骤。 在我的实际分析中,我有非对角线值,我想保留这些值用于网络分析,所以我对空矩阵并不感兴趣,而是一种将 "sparse" 或 "empty" 值分配给稀疏矩阵的方法矩阵.

我假设你确实有一个 class 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]