2012-11-27 5 views
20

Domanda: Come posso utilizzare paste senza 100000 diventando 1e+05?Come posso incollare 100000 senza che sia abbreviato in 1e + 05?

Ci scusiamo in anticipo se questa domanda sembra frivola (ma ha provocato un bug nel mio codice). Uso R per chiamare uno script esterno, quindi quando dico ad es. paste("abc",100000) Voglio che emetta "abc 100000" e non "abc 1e+05".

Ecco un esempio di come si presenta sul mio schermo:

> paste("abc",100000) 
[1] "abc 1e+05" 
> paste("abc",100001) 
[1] "abc 100001" 

Ciò si traduce nel comportamento bizzarro che il mio script funziona per l'ingresso "100001", ma non "100000".

Mi rendo conto che potrei creare uno script per convertire i numeri in stringhe, ma mi piace, ma sento che non dovrei farlo se c'è un modo interno per fare la stessa cosa (sospetto che ci sia qualche "metodo" I Mi mancano).

[Se serve, io sono su Ubuntu 12.04.1 LTS ("preciso"), in esecuzione R versione 2.14.1 (2011-12-22) in un terminale.]

risposta

22

Vedi ?options, in particolare scipen:

R> paste("abc", 100000) 
[1] "abc 1e+05" 
R> options("scipen"=10) # set high penalty for scientific display 
R> paste("abc", 100000) 
[1] "abc 100000" 
R> 

In alternativa, la formattazione di controllo strettamente alla vecchia scuola di via sprintf():

R> sprintf("%s %6d", "abc", 100000) 
[1] "abc 100000" 
R> 
+0

O semplicemente mettere il "100000" tra virgolette anche ... – neilfws

11

In alternativa, è possibile utilizzare numeri interi che don' t viene stampato in notazione scientifica. Puoi specificare che il tuo numero è un intero mettendo una "L" dietro di esso, o facendo as.integer.

> paste("abc",100000L) 
[1] "abc 100000" 
> paste("abc",as.integer(1000000000)) 
[1] "abc 1000000000" 
6

alternativa format può essere più semplice di sprintf soprattutto quando si desidera cambiare la modalità di visualizzazione decimali:

> paste("abc",format(100000, scientific = FALSE)) 
[1] "abc 100000" 
> paste("abc",format(0.1234567, scientific = FALSE, digits = 4)) 
[1] "abc 0.1235" 
Problemi correlati