2012-09-28 19 views

Respuesta

19

Solo cuando imprima un valor numérico, debe elegir una representación concreta (es decir, cómo debe formatearse el número). No puede cambiar una variable numérica de "-0.34" a "-.34"; ambas son representaciones para el mismo número.

Sin embargo, cuando imprima una expresión e, puede elegir cómo debe formatearse. No sé de ninguna manera la acumulación para dejar fuera el líder de "0", pero siempre se puede simplemente eliminar de forma manual:

> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34)) 
[1] "-.34" 

se puede definir una función para la conveniencia, por ejemplo,

numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) } 
+0

Pero 'sub' cambia la variable a carácter ... –

+0

corrigiendo: * cambia –

2

Además de respuesta agradable @ de Stefan, yo nos topamos con el siguiente código que lleva a cabo la misma cosa pero imprime más decimales:

f = function(X1)gsub("0\\.","\\.", X1) 
+3

Debe tener cuidado con solo reemplazar "0". con ".", ya que esto convertirá "10.12" en "1.12", lo que presumiblemente no es intencionado. Lo resolví usando la expresión regular '"^(-?) 0. "'. Esto solo coincide si el cero es el primer caracter (excepto posiblemente un '-'). – stefan

+0

Gracias por el consejo, Stefan. @Manoel Galdino: para mí, la variable sigue siendo numérica después de usar la función de Stefan. – rolando2

7

Además de las respuestas existentes, que quería mencionar que la El paquete weights tiene una función rd() que se puede usar para "redondear números al texto sin cero al principio". Por supuesto, el resultado no es numérico, sino personaje.

library("weights") 
rd(-0.341, digits=2) 
[1] "-.34" 
0

Necesitaba mostrar los números a 3 decimales. Si desea imprimir en un número arbitrario de decimales y no desea tener que agregar otro paquete (es decir, el paquete weights anterior), entonces esta función (adaptada de la respuesta de @stefan) parece funcionar:

numformat <- function(x, digits = 2) { 
    ncode <- paste0("%.", digits, "f") 
    sub("^(-?)0.", "\\1.", sprintf(ncode, x)) 
} 

Así, por ejemplo:

> numformat(-.232, 2) 
[1] "-.23" 
> numformat(-.232, 3) 
[1] "-.232" 
> numformat(-.232, 4) 
[1] "-.2320" 
0

Si es para la presentación de informes en I Markdown utilizo el MOTE paquete con el APA() y código: apa(-0.34, 2, FALSE) esto devolverá -.34 en mis documentos.