2012-05-30 521 views
7

I no quiero ver cualquier notación científica en cualquier resultado de cualquier cálculo en mi sesión R. Quiero ver todos los números reales, preferiblemente con una coma (,) después de cada tres dígitos.Eliminar completamente la notación científica para toda la sesión R

¿Cómo puedo hacer eso? options(scipen = 999) no lo corta.

+1

Por curiosidad morbosa, ¿por qué? La precisión doble solo tiene una precisión de ~ 16 dígitos, por lo que todo lo que sigue se redondea de todos modos. –

+1

uso de contabilidad – JoeJoe

+2

¿Entiende la diferencia entre lo que se muestra en la consola y lo que se escribe en un archivo u otra conexión? –

Respuesta

10

La función print.default observa el valor options()['digits'] al "decidir" qué ancho asignar, por lo que es posible que tenga que aumentarlo e intentar maximizar "scipen". Hay problemas específicos del sistema operativo con valores superiores a 16 para ese ancho. En cuanto a la solicitud de comas, ... olvídalo. R no es un sistema de información financiera. Si necesita forzar este formato de salida, puede definir objetos para que sean de una clase particular y escribir métodos de impresión para ellos usando sprintf y formatC, o supongo que puede reescribir print.default, pero eso solo podría afectar las operaciones de impresión que no fueron pasó a uno de los otros más de 100 métodos para print.

Hay métodos de salida. formatC() y prettyNum() tienen un argumento 'big.mark' que insertará comas en números. La salida está en formato "character", por lo tanto, haga , no intente hacer más cálculos sobre los resultados que cree.

También hay métodos de entrada que podían leer las columnas con los números que contiene comas o los símbolos de moneda:

setAs("character", "num.with.commas", function(from) as.numeric(gsub(",", "", from))) 
setAs("character", "euro", 
function(from) as.numeric(gsub("€", "", from))) 
setAs("character", "num_pct", 
function(from) as.numeric(gsub("%", "", from))/100) 
# you will get warning messages if you have not defined the class, 
#  .... but this will still succeed 

Input <- "A B C 
1,000 1% 3.50€ 
2,000 2% 4.77€ 
3,000 3% €5.68 
" 
DF <- read.table(textConnection(Input), header = TRUE, 
       colClasses = c("num.with.commas", "num_pct", "euro")) 
str(DF) 
Cuestiones relacionadas