2014-01-30 1 views
3

분석을 위해 희소 행렬을 사용하고 싶습니다. 스파 스 행렬의 각 셀은 집합 {0,1, NA}의 하나의 값을 포함합니다. 여기서 NA는 누락 된 값을 나타냅니다.스파 스 매트릭스의 대체 된 값을 0이 아닌 NA로 어떻게 설정합니까?

예를 들어, I는 희소 행렬을 생성하기 위해 다음과 같은 코드를 사용할 수

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

및 I는 다음과 같은 출력 얻을 : 만들 매트릭스 기능을 사용

. . . 
1 1 1 
NA NA NA 

것이 가능을 행렬의 데이터 포인트가 '제외 된'함수는 0이 아닌 NA 값입니까? 사용할 수있는 다른 기능이 있습니까?

따라서, 내 예에서, 내 원하는 출력은 다음과 같습니다

0 0 0 
1 1 1 
. . . 

나는 도움말 페이지와 웹 사이트를 살펴 보았다하지만 난 답을 발견하지 않았습니다. replValue를 설정해야한다고 생각합니다.

답변

2

실제로 두 가지 질문이 있습니다. 첫 번째 방법은 0을 표시하는 방법입니다. 발송 후 사용하는 정확한 방법을 찾아서 해결하기 쉽습니다 :

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

관련 문제