Domanda

C'è un'opzione in R per ottenere il controllo su esposizione della cifra. Ad esempio:

options(digits=10)

si suppone per dare il risultato del calcolo 10 cifre fino alla fine della sessione di R. Nel file di aiuto della R, la definizione dei parametri per le cifre è la seguente:

  

cifre: controlla il numero di cifre   per la stampa durante la stampa di valori numerici.   E 'solo un suggerimento. I valori validi   sono 1 ... 22 con il valore predefinito 7

Quindi, dice che questo è solo un suggerimento. Che cosa succede se mi piace per visualizzare sempre 10 cifre, non di più o di meno?

La mia seconda domanda è, che cosa se mi piace per visualizzare più di 22 cifre, vale a dire per i calcoli più precisi come 100 cifre? E 'possibile con base R, o ho bisogno di un pacchetto / funzione aggiuntiva per questo?

Modifica Grazie al suggerimento di jmoy, ho provato sprintf("%.100f",pi) e ha dato

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

, che dispone di 48 decimali. È questo il limite massimo R in grado di gestire?

È stato utile?

Soluzione

Il motivo è solo un suggerimento è che si potrebbe facilmente scrivere una funzione di stampa che ha ignorato il valore di opzioni. Le funzioni di stampa e di formattazione incorporati fanno utilizzare il valore options come predefinito.

Per quanto riguarda la seconda domanda, dal momento che utilizza R precisione aritmetica finita, le risposte non sono precisi al di là di 15 o 16 cifre decimali, quindi, in generale, di più non sono necessari. Il GMP e RCDD pacchetti affare con più precisione aritmetica (tramite un interace alla libreria GMP), ma questo è in gran parte legato alla grandi numeri interi piuttosto che posti più decimali per i tuoi doppie.

Mathematica o Maple vi permetterà di dare il maggior numero di cifre decimali come il tuo cuore desidera.

EDIT:
Potrebbe essere utile pensare alla differenza tra decimali e cifre significative. Se stai facendo test statistici che si basano sulle differenze di là della cifra significativa 15, allora la vostra analisi è quasi certamente spazzatura.

D'altra parte, se si sta solo a che fare con numeri molto piccoli, che è meno di un problema, dal momento che R in grado di gestire il numero più piccolo .Machine$double.xmin (di solito 2e-308).

Confrontare questi due analisi.

x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1)  #Should throw an error

x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2)  #ok

Nel primo caso, le differenze tra i numeri si verificano solo dopo molti figure significative, quindi i dati sono "quasi costanti". Nel secondo caso, Anche se la dimensione delle differenze tra i numeri sono gli stessi, rispetto alla grandezza dei numeri stessi sono grandi.


Come già detto da e3bo, è possibile utilizzare più precisione numeri in virgola mobile utilizzando il pacchetto Rmpfr.

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

Queste sono più lenti e più intensivo di memoria da usare rispetto regolari (doppia precisione) vettori numeric, ma può essere utile se si ha un problema mal condizionata o algoritmo instabile.

Altri suggerimenti

Se si producono l'intera produzione da soli, è possibile utilizzare sprintf(), per es.

> sprintf("%.10f",0.25)
[1] "0.2500000000"

Specifica che si desidera formattare un numero in virgola mobile con dieci punti decimali (in %.10f la f è per galleggiante e il .10 specifica dieci punti decimali).

Non so di alcun modo di forzare le funzioni di livello superiore di R per stampare un numero esatto di cifre.

Visualizzazione 100 cifre non ha senso se si stampa soliti numeri di R, dal momento che la migliore precisione si può ottenere utilizzando 64 bit raddoppia è di circa 16 cifre decimali (guarda .Machine $ double.eps sul vostro sistema). Le cifre rimanenti sarà solo spazzatura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top