繁体   English   中英

如何将稀疏矩阵中的替换值设置为NA而不是0?

[英]How do I set the replaced value in a sparse matrix to NA rather than 0?

我想使用稀疏矩阵进行分析。 稀疏矩阵中的每个单元包括来自集合{0,1,NA}的一个值。 NA在这里代表缺失值。

例如,我可以使用以下代码来创建稀疏矩阵:

    library(Matrix); 
    toy <- Matrix(c(0,1,NA), nrow=3, ncol=3, sparse = TRUE)

我得到以下输出:

.  .  .
1  1  1
NA NA NA

是否可以使用矩阵函数创建一个函数,其中矩阵的数据点“遗漏”是NA值而不是0? 我可以使用其他功能吗?

因此,从我的例子中,我想要的输出是:

0 0 0
1 1 1
. . .

我已经探索了帮助页面和网站,但我还没有找到答案。 我相信我需要设置'replValue'。

实际上有两个单独的问题。 第一个是如何显示零。 通过查找调度后使用的确切方法很容易解决:

Matrix::printSpMatrix(toy, zero.print="0")

[1,]  0  0  0
[2,]  1  1  1
[3,] NA NA NA

第二个问题是NA输出是否可以用其他字符抑制。 嗯,这不是直接可能的:没有合适的参数。

但是,修改源始终是一个选项。 当心:这是一个黑客,这可能会导致不可预见的后果!

toy_print <- function (x, digits = NULL, maxp = getOption("max.print"), cld = getClassDef(class(x)), 
                       zero.print = ".", col.names, note.dropping.colnames = TRUE, 
                       col.trailer = "", align = c("fancy", "right")) 
{
    stopifnot(extends(cld, "sparseMatrix"))
    x.orig <- x
    cx <- formatSpMatrix(x, digits = digits, maxp = maxp, cld = cld, 
                         zero.print = zero.print, col.names = col.names, note.dropping.colnames = note.dropping.colnames, 
                         align = align)
    if (col.trailer != "") 
        cx <- cbind(cx, col.trailer, deparse.level = 0)
    # here's the NA hack
    cx[cx=="NA"] <- "."
    print(cx, quote = FALSE, right = TRUE, max = maxp)
    invisible(x.orig)
}

toy_print(toy, zero.print="0")

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM