Tengo un número, por ejemplo 1.128347132904321674821 que me gustaría mostrar como solo dos decimales cuando se muestra en la pantalla (o se escribe en un archivo). ¿Cómo se hace eso?
x <- 1.128347132904321674821
EDITAR:
El uso de:
options(digits=2)
Se ha sugerido como una posible respuesta. ¿Hay alguna manera de especificar esto dentro de un script para uso único? Cuando lo agrego a mi script, no parece hacer nada diferente y no estoy interesado en volver a escribir mucho para formatear cada número (estoy automatizando un informe muy grande).
-
Respuesta: ronda (x, dígitos = 2)
r
formatting
rounding
r-faq
Brandon Bertelsen
fuente
fuente
controls the number of digits to print when printing numeric values. It is a suggestion only. Valid values are 1...22 with default 7. See the note in print.default about values greater than 15.
de las opciones? solo afecta la salida.round(23, digits=2)
se imprimirá23
y no23.00
. Si quieres lo último, prueba stackoverflow.com/a/12135122/180892Respuestas:
Antecedentes: algunas respuestas sugeridas en esta página (p. Ej.
signif
,options(digits=...)
) No garantizan que se muestre un cierto número de decimales para un número arbitrario. Supongo que esta es una característica de diseño en R por la cual una buena práctica científica implica mostrar un cierto número de dígitos basados en los principios de " cifras significativas ". Sin embargo, en muchos dominios (por ejemplo, estilo APA , informes comerciales), los requisitos de formato dictan que se muestre un cierto número de decimales. Esto a menudo se hace con fines de coherencia y estandarización en lugar de preocuparse por cifras significativas.Solución :
El siguiente código muestra exactamente dos lugares decimales para el número
x
.Por ejemplo:
Una función más general es la siguiente, donde
x
está el número yk
es el número de decimales que se muestran.trimws
elimina cualquier espacio en blanco inicial que pueda ser útil si tiene un vector de números.P.ej,
fuente
0.0001
como0.00
format()
yprettyNum()
transforman los números en caracteres. ¿Cómo abordarías esto?format(c(10, 1), nsmall=1)
rendimientos"10.0" " 1.0"
(tenga en cuenta el espacio inicial delante del 1.0. Mientras que, lasprintf()
función parece garantizar un mejor formato en ambos lados del decimal, por ejemplo,sprintf(c(10,1), fmt = '%#.1f')
se deshace de ese molesto espacio inicial y regresa"10.0" "1.0"
.format
se utiliza en una columna.Puede formatear un número, digamos
x
, hasta decimales como desee. Aquíx
hay un número con muchos decimales. Supongamos que deseamos mostrar hasta 8 decimales de este número:Aquí
format="f"
da números flotantes en los lugares decimales habituales, digamos, xxx.xxx, ydigits
especifica el número de dígitos. Por el contrario, si desea obtener un número entero para mostrar, lo usaríaformat="d"
(al igual quesprintf
).fuente
formatC
es casi exclusivamente lo que uso para este propósito. Creo que esta respuesta es buena y está en la base R según la solicitud del OP.Puedes probar mi paquete formatable .
Lo bueno es que
x
sigue siendo un vector numérico y puede hacer más cálculos con el mismo formato.Aún mejor, los dígitos no se pierden, puede volver a formatear con más dígitos en cualquier momento :)
fuente
por 2 decimales suponiendo que desea seguir ceros al final
lo que da
Como @mpag menciona a continuación, parece que R a veces puede dar valores inesperados con esto y el método redondo, por ejemplo, sprintf (5.5550, fmt = '% #. 2f') da 5.55, no 5.56
fuente
Algo como eso :
Opción de definición de dígitos:
fuente
digits
opción no parece establecer el número de dígitos después del decimal. Por ejemplo, cuando configuro opciones (dígitos = 2), la impresión de 7.25 da como resultado 7.2, 1234.25 se convierte en 1234 y 0.25 permanece en 0.25. ¿Hay otra opción interactuando con esto?Comprobar funciones prettyNum, formato
tener ceros de prueba (123.1240 por ejemplo) usar
sprintf(x, fmt='%#.4g')
fuente
sprintf
, es básicamente un marco para el formateofmt
argumento, lo siento!g
en su respuesta es para dígitos fijos, el usof
funciona mejor.Si prefiere dígitos significativos a dígitos fijos, el comando signif podría ser útil:
fuente
Error: could not find function "fixed"
signif
funciona para el número específico proporcionado, pero supongo que el problema común aplicado es cuando necesita mostrar exactamente dos lugares decimales pero no sabe cuál es el número antes de tiempo. En ese caso,signif
dará diferentes números de decimales dependiendo del número real.La función
formatC()
se puede usar para formatear un número con dos decimales. Esta función proporciona dos lugares decimales incluso cuando los valores resultantes incluyen ceros finales.fuente
Estoy usando esta variante para forzar la impresión de K decimales:
fuente
Tenga en cuenta que los objetos numéricos en R se almacenan con doble precisión , lo que le proporciona (aproximadamente) 16 dígitos decimales de precisión; el resto será ruido. Admito que el número que se muestra arriba probablemente sea solo un ejemplo, pero tiene 22 dígitos.
fuente
Me parece que sería algo así como
Por un poco de ayuda en línea .
fuente
format.default(x, digits = 2)
solo un tiro en la oscuridad, aunque en función del enlace proporcionado. Esa información es algo que a falta de lo que normalmente leía para la documentación, esperaba ver también los resultados impresos.si solo desea redondear un número o una lista, simplemente use
Luego, los datos se redondearán a 2 decimales.
fuente