2012-06-27 25 views
7

Estoy ejecutando código para producir salidas donde quiero que todas las salidas se impriman con 1 lugar decimal. Sin embargo, el código utiliza funciones que utilizo generalmente y no deseo especificar dentro de éstas que la salida impresa se redondea.Establecer el número predeterminado de lugares decimales para la impresión

Las respuestas a esta pregunta Formatting Decimal places in R sugieren usar options(digits=2) o round(x, digits=2).

La primera opción es un ajuste general que es ideal para el redondeo a 1.2341.2 pero imprimiría 12.345 como 12

La segunda opción sería trabajar si se pone dentro de la función, pero no quiero tocarlos. Cómo configurar esto en general?

Respuesta

8

Usted puede hacer esto:

print <- function(x, ...) { 
    if (is.numeric(x)) base::print(round(x, digits=2), ...) 
    else base::print(x, ...) 
} 
+0

Gracias por su sugerencia. Al tratar este llegué en el mismo problema que el ajuste de las opciones (dígitos = 2) - 'la función de impresión #load x <- 12.34 z = impresión (x) [1] 12' - ¿Hay algo que' ¿Me falta? – BuckyOH

+1

, ¿restableció la opción 'dígitos' a su valor predeterminado? inténtalo de nuevo en una nueva sesión. –

+0

Bueno, eso es vergonzoso, parece funcionar ahora. Gracias. – BuckyOH

5

me gusta formatC para los números de impresión con un número especificado de posiciones decimales. De esta forma, 1 siempre se debe imprimir como "1.0" cuando digits = 1 y format = "f". Puede crear un método de impresión S3 para objetos de clase numérica como el siguiente:

print.numeric<-function(x, digits = 1) formatC(x, digits = digits, format = "f") 

print(1) 
# [1] "1.0" 

print(12.4) 
# [1] "12.4" 

print(c(1,4,6.987)) 
# [1] "1.0" "4.0" "7.0" 

print(c(1,4,6.987), digits = 3) 
# [1] "1.000" "4.000" "6.987" 
Cuestiones relacionadas