我想将空值或稀疏值分配给R中的稀疏矩阵。具体来说,我想从Matrix包中删除稀疏矩阵对角线中的所有值。 我目前只能将非稀疏的0分配给对角线,然后用drop0函数删除它们。
有没有办法将空值直接分配到稀疏矩阵的对角线?
以下代码演示了此问题:
library(Matrix)
m <- Diagonal(10)
diag(m) <- 0
m
drop0(m)
我想跳过drop0(m)步骤。 在我的实际分析中,我有非对角线值,我想保留用于网络分析,所以我对空矩阵并不感兴趣,而是分配&#34;稀疏&#34;或&#34;空&#34;将值转换为稀疏矩阵。
答案 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
并移除所有i
,j
,x
值,其中i == j(或跳过强制并计算i
和p
中我认为困难的正确指数。
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]