Formateo de lugares decimales en R

Tengo un número, por ejemplo 1.128347132904321674821, que me gustaría mostrar como solo dos decimales cuando salga a la pantalla (o escriba en un archivo). ¿Cómo hace uno eso?

x <- 1.128347132904321674821 

EDITAR:

El uso de:

 options(digits=2) 

Ha sido sugerido como una posible respuesta. ¿Hay alguna manera de especificar esto dentro de un script para un solo uso? Cuando lo agrego a mi secuencia de comandos 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: redondo (x, dígitos = 2)

Antecedentes: algunas respuestas sugeridas en esta página (p. Ej., signif , options(digits=...) ) no garantizan que se muestre una determinada cantidad de decimales para un número arbitrario. Supongo que esta es una característica de diseño en R en la que las buenas prácticas científicas implican mostrar una cierta cantidad de dígitos en función de los principios de ” cifras significativas “. Sin embargo, en muchos dominios (p. Ej., Estilo APA , informes comerciales), los requisitos de formateo dictan que se muestre un cierto número de decimales. Esto se hace a menudo con fines de uniformidad y uniformidad en lugar de preocuparse por cifras significativas.

Solución :

El siguiente código muestra exactamente dos lugares decimales para el número x .

 format(round(x, 2), nsmall = 2) 

Por ejemplo:

 format(round(1.20, 2), nsmall = 2) # [1] "1.20" format(round(1, 2), nsmall = 2) # [1] "1.00" format(round(1.1234, 2), nsmall = 2) # [1] "1.12" 

Una función más general es la siguiente, donde x es el número k es la cantidad de decimales que se muestran. trimws elimina cualquier espacio en blanco trimws que puede ser útil si tiene un vector de números.

 specify_decimal < - function(x, k) trimws(format(round(x, k), nsmall=k)) 

P.ej,

 specify_decimal(1234, 5) # [1] "1234.00000" specify_decimal(0.1234, 5) # [1] "0.12340" 

Puede formatear un número, digamos x , hasta decimales como lo desee. Aquí x es un número con muchos decimales. Supongamos que deseamos mostrar hasta 8 decimales de este número:

 x = 1111111234.6547389758965789345 y = formatC(x, digits = 8, format = "f") # [1] "1111111234.65473890" 

Aquí format="f" da números flotantes en los lugares decimales usuales say, xxx.xxx, y digits especifica el número de dígitos. Por el contrario, si desea obtener un entero para mostrar, usará format="d" (muy parecido a sprintf ).

Puedes probar mi tabla de formato de paquete.

 > # devtools::install_github("renkun-ken/formattable") > library(formattable) > x < - formattable(1.128347132904321674821, digits = 2, format = "f") > x [1] 1.13 

Lo bueno es que x sigue siendo un vector numérico y puede hacer más cálculos con el mismo formato.

 > x + 1 [1] 2.13 

Aún mejor, los dígitos no están perdidos, puedes reformatear con más dígitos en cualquier momento 🙂

 > formattable(x, digits = 6, format = "f") [1] 1.128347 

para 2 decimales suponiendo que desea mantener ceros al final

 sprintf(5.5, fmt = '%#.2f') 

lo que da

 [1] "5.50" 

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

Compruebe las funciones prettyNum, format

tener ceros de prueba (123.1240 por ejemplo) use sprintf(x, fmt='%#.4g')

Algo como eso :

 options(digits=2) 

Opción de definición de dígitos:

 digits: controls the number of digits to print when printing numeric values. 

Bueno, los dos que vienen a la mente son

 fixed(1.128347132904321674821, digits=2) 

o si prefieres dígitos significativos a dígitos fijos entonces;

 signif(1.128347132904321674821,digits=3) 

La función formatC() se puede usar para formatear un número con dos decimales. La función asigna dos decimales incluso cuando los valores resultantes incluyen ceros finales.

Tenga en cuenta que los objetos numéricos en R se almacenan con doble precisión , lo que le da (aproximadamente) 16 dígitos decimales de precisión; el rest será ruido. Concedo que el número que se muestra arriba es solo para un ejemplo, pero tiene 22 dígitos.

Estoy usando esta variante para los lugares decimales K de la impresión forzada:

 # format numeric value to K decimal places formatDecimal < - function(x, k) format(round(x, k), trim=T, nsmall=k) 

Me parece que sería algo así como

 library(tutoR) format(1.128347132904321674821, 2) 

Por un poco de ayuda en línea .

si solo quieres redondear un número o una lista, simplemente usa

 round(data, 2) 

Entonces, los datos serán redondos a 2 decimales.