将dgCMatrix转换为逻辑矩阵

3

考虑这个简单的稀疏矩阵

> (X <- sparseMatrix(c(1, 2, 1), c(1, 1, 2), x = 0:2))
2 x 2 sparse Matrix of class "dgCMatrix"

[1,] 0 2
[2,] 1 .

我该如何将其转换为矩阵以指示相应元素是否为空?这是我目前的做法,但是0并不等于“空”,而这种方法不能区分它们。
> (Y <- X != 0)
2 x 2 sparse Matrix of class "lgCMatrix"

[1,] : |
[2,] | .

为了澄清,期望的输出只能包含TRUEFALSE而不是NA。它可以是matrixsparseMatrix。更好的情况是,它可以是一个list,在这种情况下,每个插槽对应于X的一列。例如,X的答案应该为:
     [,1]  [,2]
[1,] TRUE  TRUE
[2,] TRUE FALSE

或者

$`1`
[1] TRUE TRUE

$`2`
[1]  TRUE FALSE
2个回答

3
Y <- as(X, "lgCMatrix") #should be more efficient than X != 0
Y@x[] <- TRUE #set all values to TRUE
as.matrix(Y)
#     [,1]  [,2]
#[1,] TRUE  TRUE
#[2,] TRUE FALSE

2
pex <- function(p) {
    dp <- diff(p)
    rep(seq_along(dp), dp)
}

m = matrix(FALSE, nrow = nrow(X), ncol = ncol(X))
m[cbind(X@i + 1, pex(X@p))] = TRUE
m
#     [,1]  [,2]
#[1,] TRUE  TRUE
#[2,] TRUE FALSE

pex是从这里得来的"最初的回答"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接