varias significativas redondeo numero lineas hacer grafico graficas funcion decimales como cifras r

numero - redondeo de cifras significativas



Formato de nĂºmeros a cifras significativas muy bien en R (6)

¿Eres consciente de prettyNum() y todas sus opciones?

Quiero dar formato a los números en mis informes con dígitos significativos , pero sigo rastreando los ceros significativos y formateo correctamente los números grandes

Por ejemplo, los números c (10.00001,12345,1234.5,123.45,1.2345,0.12345) a 3 dígitos significativos deben ser 10.0, 12300, 1230, 123, 1.23, 0.123 pero obtengo resultados diferentes con métodos diferentes (y ninguno parece funcionar de manera universal .

> numbers<-c(10.00001,12345,1234.5,123.45,1.2345,0.12345) > for(n in seq(numbers)){ + print(signif(numbers[n],digits=3)) + print(format(numbers[n],digits=3)) + print(formatC(numbers[n], digits=3,format="fg")) + print(formatC(numbers[n], digits=3,format="fg", flag="#")) + } [1] 10 [1] "10" [1] " 10" [1] "10.0" [1] 12300 [1] "12345" [1] "12345" [1] "12345." [1] 1230 [1] "1234" [1] "1234" [1] "1234." [1] 123 [1] "123" [1] " 123" [1] "123." [1] 12.3 [1] "12.3" [1] "12.3" [1] "12.3" [1] 1.23 [1] "1.23" [1] "1.23" [1] "1.23" [1] 0.123 [1] "0.123" [1] "0.123" [1] "0.123"

Aquí, signif y formato ronda el resultado 10.00001. formatC with flag = "#" hace correctamente los números pequeños pero no los números grandes.

¿Hay alguna manera mejor?


El método anterior de Paul Hurley me funcionó bien tanto para los números positivos como para los negativos. A continuación se muestra un código que modifica la solución de Paul en una función en la que se pueden especificar las cifras significativas deseadas.

sigfig <- function(vec, n=3){ ### function to round values to N significant digits # input: vec vector of numeric # n integer is the required sigfig # output: outvec vector of numeric rounded to N sigfig formatC(signif(vec,digits=n), digits=n,format="fg", flag="#") } # end of function sigfig

para verificar que funcione bien

numbers <- c(50000.01, 1000.001, 10.00001, 12345, 1234.5, 123.45, 1.2345, 0.12345, 0.0000123456, -50000.01, -1000.001,-10.00001, -12345, -1234.5, -123.45, -1.2345, -0.12345, -0.0000123456) sigfig(numbers) # defaults to 3 sigfig(numbers, 3) sigfig(numbers, 1) sigfig(numbers, 6)


Lo siento, nunca actualicé esto en el momento. Ninguna de las declaraciones en mi pregunta, o prettynum funcionó. Al final utilicé

print(formatC(signif(numbers[n],digits=3), digits=3,format="fg", flag="#"))

lo que hizo frente correctamente a los números cero y grandes que se arrastran.


Otra modificación en la respuesta de Pablo. Parece que también deja un decimal al final. Lo estoy eliminando con gsub:

sigfig <- function(vec, digits){ return(gsub("//.$", "", formatC(signif(vec,digits=digits), digits=digits, format="fg", flag="#"))) }


Si te gusta la notación científica.

> format(2^31-1, scientific = TRUE, digits = 3) [1] "2.15e+09"


Una opción más barebones es options() , que simplemente redondea. Si planeas hacer esto mucho, te sugiero revisar Sweave.

> a <- 1.23456789 > options(digits=2) > a [1] 1.2 > options(digits=6) > a [1] 1.23457