superponer - Formato de lugares decimales en R
superponer graficas en r (12)
A mi me parece que sería algo así como
library(tutoR)
format(1.128347132904321674821, 2)
Por un poco de ayuda en línea .
Tengo un número, por ejemplo 1.128347132904321674821 que me gustaría mostrar como solo dos lugares decimales cuando se envía a 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 una manera de especificar esto dentro de un script para uso de una sola vez? Cuando lo agrego a mi script, no parece hacer nada diferente y no estoy interesado en volver a escribir para dar formato a cada número (estoy automatizando un informe muy grande).
-
Respuesta: ronda (x, dígitos = 2)
Algo como eso :
options(digits=2)
Definición de la opció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 prefiere dígitos significativos a dígitos fijos entonces;
signif(1.128347132904321674821,digits=3)
Comprobar funciones prettyNum, formato
para tener ceros de prueba (123.1240 por ejemplo) use sprintf(x, fmt=''%#.4g'')
Estoy usando esta variante para forzar puntos K decimales de impresión:
# format numeric value to K decimal places
formatDecimal <- function(x, k) format(round(x, k), trim=T, nsmall=k)
La función formatC()
se puede usar para formatear un número con dos decimales. Esta función proporciona dos decimales, incluso cuando los valores resultantes incluyen ceros finales.
Puede dar formato a un número, digamos x
, hasta posiciones decimales como 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 decimales habituales, por ejemplo, xxx.xxx, y los digits
especifican el número de dígitos. Por el contrario, si quisiera obtener un entero para mostrar, usaría format="d"
(como sprintf
).
Puedes probar mi paquete formattable .
> # 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 puedes hacer más cálculos con el mismo formato.
> x + 1
[1] 2.13
Aún mejor, los dígitos no se pierden, puede reformatear con más dígitos en cualquier momento :)
> formattable(x, digits = 6, format = "f")
[1] 1.128347
Si solo desea redondear un número o una lista, simplemente use
round(data, 2)
Luego, los datos se redondearán al 2 decimal.
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 resto será ruido. Admito que el número que se muestra arriba es probablemente solo para un ejemplo, pero tiene 22 dígitos.
para 2 posiciones decimales asumiendo que usted quiere mantener ceros finales
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 de ronda, por ejemplo, sprintf (5.5550, fmt = ''% #. 2f'') da 5.55, no 5.56
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 lo que una buena práctica científica implica mostrar un número determinado de dígitos basados en los principios de " cifras significativas ". Sin embargo, en muchos dominios (por ejemplo, estilo de APA , informes de negocios), los requisitos de formato dictan que se muestra un cierto número de lugares decimales. Esto se hace a menudo con fines de uniformidad y estandarización en lugar de preocuparse por cifras significativas.
Solución :
El siguiente código muestra exactamente dos 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 y k
es el número de decimales que se muestran. trimws
elimina cualquier espacio en blanco trimws
que puede ser útil si tienes 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"