9

非表示にしたい NA とゼロを含む対角行列があります。

na.print = "" は正常に動作していますが、zero.print = "." 0.00 を != 0 として扱っているようです ?

これは、印刷された実行可能な例です。これにより、私が何を意味するかがわかります。

x <- matrix(c(0.01, NA, NA, NA, 0.00, 0.00, NA, NA, 0.00, 0.00, -0.01, NA, 0.00, 0.00, 0.00, 0.00), nrow=4, byrow=TRUE)
x
         [,1] [,2]  [,3] [,4]
    [1,] 0.01   NA    NA   NA
    [2,] 0.00    0    NA   NA
    [3,] 0.00    0 -0.01   NA
    [4,] 0.00    0  0.00    0

print.table(x, na.print="", zero.print=".")
         [,1]  [,2]  [,3]  [,4] 
    [1,]  0.01                  
    [2,]  0.00  0.00            
    [3,]  0.00  0.00 -0.01      
    [4,]  0.00  0.00  0.00  0.00

以下の役立つ回答に従って (ありがとう!)、print.table での not zero.print items の明示的な選択に基づいて、テーブル内の任意の項目が失敗する (x == round(x))、ここで動作するバージョンを次に示します。浮動小数点。データフレームの印刷タスク用に作成しましたが、マトリックスで動作します。

print.dataframe <- function (x, digits = getOption("digits"), quote = FALSE, na.print = "", zero.print = "0", justify = "none", ...){
    xx <- format(x, digits = digits, justify = justify)
    if (any(ina <- is.na(x))) 
        xx[ina] <- na.print
    i0 <- !ina & x == 0
    if (zero.print != "0" && any(i0)) 
        xx[i0] <- zero.print
    if (is.numeric(x) || is.complex(x)){
        print(xx, quote = quote, right = TRUE, ...)
    }else{
        print(xx, quote = quote, ...)   
    }
    invisible(x)
}

print.dataframe(bob, zero.print = ".", justify="left")
4

2 に答える 2

4

回避策は次のとおりです。

> print.table(local({x[x==0] <- NA; x}))
     [,1]  [,2] [,3]  [,4]
[1,]  0.01                
[2,]                      
[3,]            -0.01     
[4,]                      

NAとゼロで異なる表現が必要な場合は、

> print(ifelse(is.na(x), "", ifelse(x == 0, ".", x)), quote = FALSE)
     [,1] [,2] [,3]  [,4]
[1,] 0.01                
[2,] .    .              
[3,] .    .    -0.01     
[4,] .    .    .     .  
于 2012-07-31T12:52:41.387 に答える
3

Andrie の意見と提案によると、これは .xml のコードのバグではありませんprint.tableprint.tableを期待する行列を供給する際の問題tableです。Andrie が指摘するように、すべての賭けは期待通りのアウトプットで外れています。に 1 行のコードを追加するとprint.table(以下を参照)、機能します (これを printmatrix と呼んでいることに注意してください)。

printmatrix <- 
function (x, digits = getOption("digits"), quote = FALSE, na.print = "", 
    zero.print = "0", justify = "none", ...) 
{
    xx <- format(unclass(x), digits = digits, justify = justify)
    if (any(ina <- is.na(x))) 
        xx[ina] <- na.print
    if (zero.print != "0" && any(i0 <- !ina & x == 0) && all(x == 
        round(x))) 
        xx[i0] <- sub("0", zero.print, xx[i0])
    xx[x == 0] <- zero.print                          #the line I added
    if (is.numeric(x) || is.complex(x)) 
        print(xx, quote = quote, right = TRUE, ...)
    else print(xx, quote = quote, ...)
    invisible(x)
}

printmatrix(x, zero.print = ".")
于 2012-07-31T13:28:26.530 に答える