【问题标题】:How do I set the replaced value in a sparse matrix to NA rather than 0?如何将稀疏矩阵中的替换值设置为 NA 而不是 0?
【发布时间】:2014-01-30 14:42:22
【问题描述】:

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

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

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

我得到以下输出:

.  .  .
1  1  1
NA NA NA

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

因此,在我的示例中,我想要的输出是:

0 0 0
1 1 1
. . .

我浏览了帮助页面和网站,但没有找到答案。我相信我需要设置“replValue”。

【问题讨论】:

    标签: r matrix sparse-matrix


    【解决方案1】:

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

    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,]  .  .  .
    

    【讨论】:

    • 感谢您的帮助。我运行了这段代码,收到了不同的输出:[1,] 0 0 0 [2,] 1 1 1 [3,] 1 1 1
    • 我已经清理了我的工作区,现在我得到了和你一样的答案。再次感谢您的帮助和有趣的解决方案。
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2019-01-08
    • 2023-04-10
    • 2021-11-25
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    相关资源
    最近更新 更多