Pregunta

Tengo un número, por ejemplo 1,128347132904321674821 que me gustaría mostrar como sólo dos decimales cuando se visualicen en la pantalla (o escriba en un archivo). ¿Cómo se hace eso?

x <- 1.128347132904321674821

EDIT:

El uso de:

options(digits=2)

¿Se ha sugerido como una posible respuesta. ¿Hay una manera de especificar esto dentro de una secuencia de comandos para el uso de una sola vez? Cuando añado a mi guión no parece hacer nada diferente y no estoy interesado en un montón de volver a escribir para dar formato a cada número (estoy automatización de un informe muy grande).

-

Respuesta: redondos (x, dígitos = 2)

¿Fue útil?

Solución

Antecedentes: Algunas de las respuestas sugeridas en esta página (por ejemplo, signif, options(digits=...)) no garantizan que un cierto número de decimales se muestran para un número arbitrario. Supongo que esto es una característica de diseño en el que R buena práctica científica consiste en mostrar un cierto número de dígitos en base a los principios de " cifras significativas ". Sin embargo, en muchos dominios (por ejemplo, estilo de la APA , informes comerciales) los requisitos de formato que dictan se muestran un cierto número de posiciones decimales. Esto se hace a menudo con fines de consistencia y estandarización en lugar de ser afectado con cifras significativas.

Solución

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

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 el siguiente, donde x es el número y k es el número de decimales a mostrar. trimws elimina cualquier espacio en blanco al principio que puede ser útil si usted tiene un vector de números.

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

por ejemplo.,

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

Otros consejos

Se puede dar formato a un número, x digamos, hasta cifras decimales como desee. Aquí x es un número con muchos decimales. Supongamos que deseamos mostrar hasta 8 cifras decimales de este número:

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

A continuación, los números format="f" da flotantes en los lugares decimales habituales dicen, xxx.xxx, y digits especifica el número de dígitos. Por el contrario, si desea obtener un número entero para mostrar que usaría format="d" (al igual que sprintf).

Puede 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 se puede hacer más cálculos con el mismo formato.

> x + 1
[1] 2.13

Aún mejor, los dígitos no se pierden, puede volver a formatear con más dígitos en cualquier momento:)

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

durante 2 cifras decimales suponiendo que desea mantener ceros a la derecha

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

que da

[1] "5.50"

Como @mpag menciona a continuación, parece R a veces puede dar valores inesperados con este y el método de ronda por ejemplo sprintf (5,5550, fmt = '% #. 2f') da 5,55, no 5.56

Verificar funciones prettyNum, formato

tener ceros probando (123.1240 por ejemplo) uso sprintf(x, fmt='%#.4g')

Algo así:

options(digits=2)

Definición de la opción de dígitos:

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

Si prefiere dígitos significativos dígitos fijos a continuación, el signif comando podría ser útil:

> signif(1.12345, digits = 3)
[1] 1.12
> signif(12.12345, digits = 3)
[1] 12.1
> signif(12345.12345, digits = 3)
[1] 12300

El formatC() función se puede utilizar para dar formato a un número de dos cifras decimales. Dos cifras decimales se dan por esta función incluso cuando los valores resultantes incluyen ceros a la derecha.

Estoy usando esta variante de cifras decimales vigor de impresión K:

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

Tenga en cuenta que los objetos numéricos en R se almacenan con doble precisión , que le da (más o menos ) 16 dígitos decimales de precisión - el resto serán ruido. Concedo que el número que se muestra arriba es probablemente sólo un ejemplo, pero es 22 dígitos.

Me parece que sería algo así como

library(tutoR)
format(1.128347132904321674821, 2)

Por un poco línea de ayuda .

Si lo que desea es redondear un número o una lista, basta con utilizar

round(data, 2)

A continuación, los datos se ronda a cabo 2 decimales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top