2014-01-30 55 views
3

我想使用稀疏矩陣進行分析。稀疏矩陣中的每個單元格包含集合{0,1,NA}中的一個值。這裏的NA代表缺失值。如何將稀疏矩陣中的替換值設置爲NA而不是0?

例如,我可以使用下面的代碼來創建一個稀疏矩陣:

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'。

回答

2

有兩個單獨的問題,其實。第一個是如何顯示零。這是很容易通過尋找被調度之後所使用的確切的方法來解決:

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

感謝您的幫助。我跑這個代碼,我收到了不同的輸出給你:[1,] 0 0 0 [2,] 1 1 1 [3,] 1 1 1 – joel38237

+0

我剛剛仔細檢查了代碼,似乎很好。 – tonytonov

+0

我已經清理了我的工作區,現在我得到和你一樣的答案。再次感謝您的幫助和有趣的解決方案。 – joel38237