2012-02-22 15 views
144

¿Puedo forzar a R a usar números regulares en lugar de usar la notación similar a e+10? Tengo:Force R para no usar la notación exponencial (por ejemplo, e + 10)?

1.810032e+09 
# and 
4 

dentro del mismo vector y quieren ver:

1810032000 
# and 
4 

estoy creando de salida para un viejo programa de moda y tengo que escribir un archivo de texto usando cat. Eso funciona bien hasta el momento, pero simplemente no puedo usar la notación e+10 allí.

+0

Relacionados: http://stackoverflow.com/q/3978266/134830 –

Respuesta

153

Esto es un poco un área gris. Debe recordar que R siempre invocará un método de impresión, y estos métodos de impresión escuchan algunas opciones. Incluyendo 'scipen' - una penalización por exhibición científica. De help(options):

'scipen': integer. Se aplicará una penalización cuando se decida imprimir valores numéricos en notación fija o exponencial. Positivo valora el sesgo hacia fijo y negativo hacia la notación científica : se preferirá la notación fija a menos que sea más que los dígitos 'scipen' más amplios.

Ejemplo:

R> ran2 <- c(1.810032e+09, 4) 
R> options("scipen"=-100, "digits"=4) 
R> ran2 
[1] 1.81e+09 4.00e+00 
R> options("scipen"=100, "digits"=4) 
R> ran2 
[1] 1810032000   4 

Dicho esto, todavía me resulta fudgeworthy. La forma más grave es usar sprintf() con ancho explícito.

+1

Gracias. Scipen parece ser la opción que estaba buscando. La explicación de la pena espeluznante me hizo tímido. Pero tu ejemplo lo explica muy bien. Sprintf, ¿eh? ¿Te refieres a los problemas que tuve con sprintf hace una semana? :) –

+1

En rstudio, si importas un conjunto de datos y haces train_sample_10k = formato (train_sample_10k, scientific = FALSE) y lo vuelves a cargar, cambiará las anotaciones científicas. – mixdev

+0

El problema con este método es hace que todas las variables 'char' ... – pyll

92

se puede lograr mediante la desactivación de la notación científica en R.

options(scipen = 999) 
+0

Además, esto se puede poner en su archivo [.Rprofile] (https: //csgillespie.github. io/efficientR/3-3-r-startup.html # rprofile) por lo que se ejecuta automáticamente de forma predeterminada. – smci

11

Mi respuesta favorita:

format(1810032000, scientific = FALSE) 
# [1] "1810032000" 

Esto le da lo que quiere sin tener que perder el tiempo en la configuración R.

-1

Ponga options(scipen = 999) en su .Rprofile file para que se auto-ejecute por defecto.

(¿Cómo es esto diferente a otra respuesta? Mantener todas sus configuraciones en todo el proyecto o global .Rprofile lo autoejecuta. Esto es útil para, por ejemplo, cargas predeterminadas de paquetes, configuración de data.table, entorno, etc.)

+0

¿Por qué exactamente la misma respuesta? https://stackoverflow.com/a/27318351/680068 Aparte del bit de Rprofile, ¿quizás mejor edites la respuesta de GingerJack? – zx8754

+0

@ zx8754: no es exactamente la misma respuesta: el punto crucial es mover esto a su .Rprofile. Entonces nunca puedes olvidarlo. Además, a medida que pasa el tiempo, .Rprofile acumula todas tus personalizaciones. – smci

+0

Depende de usted, por supuesto, pero la Q no es "cómo no puedo olvidar hacer X" sino "cómo puedo hacer X". – zx8754

Cuestiones relacionadas