2012-07-31 4 views
9

Mam diagonalne macierze z NA i zerami, które chcę ukryć.Jak powstrzymać drukowanie zerowe w tabeli (zero.print = "" nie działa)

na.print = "" działa poprawnie, ale zero.print = "." wydaje się traktować 0.00 jako! = 0?

Oto runnable przykład z nadrukiem na zewnątrz, dzięki czemu można zobaczyć, co mam na myśli: (! Dzięki chłopaki)

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 

następstwie pomocne odpowiedzi poniżej i na podstawie wyraźnego wyboru w print.table nie zerowy .print, gdy jakikolwiek element w tabeli kończy się niepowodzeniem (x == round (x)), oto wersja, która działa z floating.point. Napisałem go dla zadania drukowania danych, ale działa z macierzami.

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") 
+0

Ponieważ obiekty 'table' domyślnie przyjmują, że wszystkie elementy są liczbami całkowitymi,' print.table' nie będzie działać dla danych. – Andrie

Odpowiedz

3

Oto obejście:

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

W przypadku, że trzeba inny wyraz dla NA i zero, to,

> print(ifelse(is.na(x), "", ifelse(x == 0, ".", x)), quote = FALSE) 
    [,1] [,2] [,3] [,4] 
[1,] 0.01     
[2,] . .    
[3,] . . -0.01  
[4,] . . .  . 
+0

Dziękuję kohske. Wygląda na to, że to błąd. PS: To było moje obejście, ale wolałbym "." niż puste .. ;-( – tim

+0

Następnie znajdź zaktualizowany wyżej.Narzędzie – kohske

+1

@tim To zdecydowanie nie jest błąd.Używasz metody dla 'print.table', aby wydrukować matrycę - może to przynieść nieoczekiwane rezultaty – Andrie

3

wejście i sugestia Per Andrie za to nie jest błąd w kodzie z print.table. To problem z dostarczaniem macierzy do print.table, która oczekuje od table. Jak zauważa Andrie, wszystkie zakłady są wyłączone z oczekiwanym wynikiem. Jeśli dodasz jeden dodatkowy wiersz kodu do print.table (zobacz poniżej) to zadziała on dla ciebie (zauważ, że nazwałem to matrycą wydruku).

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 = ".") 
+0

Widzę komentarze Andrie powyżej, więc to nie jest błędem –

+0

Jestem prawie pewien, że to nie jest błąd, próbujesz wydrukować 'matrycę' używając metody dla' table' - wszelkie wyniki, które otrzymasz, będą nieoczekiwane. Proponuję zmodyfikować swoją odpowiedź. – Andrie

+0

@ Tyler Rinker Dzięki Tyler: "&& all (x == round (x)))", to wyraźnie nie jest ponowne formatowanie zer, chyba że wszystkie wartości są całkowitymi częściami ... Nie widzę celu: Praca z oporami, ale wyłączając tę ​​funkcję, aby wyświetlać zera w sposób wizualnie pomocny dokładnie wtedy, gdy jest najbardziej użyteczny (w polu wartości dziesiętnych). – tim

Powiązane problemy