Как установить замененное значение в разреженной матрице на NA, а не на 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

Можно ли использовать функцию Matrix для создания функции, в которой точки данных, «опущенные» в матрице, являются значениями NA, а не 0? Есть ли другие функции, которые я мог бы использовать?

Поэтому из моего примера мой желаемый результат:

0 0 0
1 1 1
. . .

Я изучил справочные страницы и веб-сайты, но не нашел ответа. Я считаю, что мне нужно установить «replValue».


person joel38237    schedule 30.01.2014    source источник


Ответы (1)


На самом деле есть два отдельных вопроса. Первый — как отображать нули. Это легко решить, ища точный метод, который используется после отправки:

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,]  .  .  .
person tonytonov    schedule 31.01.2014
comment
Спасибо за помощь. Я запустил этот код и получил другой вывод: [1,] 0 0 0 [2,] 1 1 1 [3,] 1 1 1 - person joel38237; 31.01.2014
comment
Я очистил свое рабочее пространство, и теперь я получаю тот же ответ, что и вы. Еще раз спасибо за помощь и интересное решение. - person joel38237; 31.01.2014