Ho letto i dati memorizzati nel formato DECIMAL
da una tabella MySQL. Io voglio fare calcoli su questi numeri entro R.Esiste un tipo di dati "Decimale" in R?
ho usato per gettarli in una represaentation numeri Codice utilizzando as.numeric()
, ma la documentazione dice:
numerico è identico a raddoppiare (e reale).
Ma c'è anche un tipo di dati Decimal in R? (Tipo di dati senza errori di arrotondamento, ...)
Ecco un semplice esempio per il problema con errori di arrotondamento:
numbersStrings = c("0.1", "0.9")
numbersNumeric = as.numeric(numbersStrings)
numbersMirror = c(numbersNumeric, 1-numbersNumeric)
str(numbersMirror)
numbersMirror
unique(numbersMirror) # has two times 0.1 ...
sprintf("%.25f", numbersMirror)
sprintf("%.25f", unique(numbersMirror)) # ... because there was a rounding error
Ciò può essere utile: http://cran.r-project.org/web/packages/Rmpfr/index.html è una libreria per eseguire operazioni in virgola mobile precisione arbitraria in R. –
La documentazione MySQL chiarisce che DECIMAL non è una precisione arbitraria. Permette più cifre (64) di quante possano essere rappresentate in un 'doppio' (53). È inoltre chiaro che il troncamento è previsto se le cifre a destra del punto decimale superano il limite scelto. Sospetto che il troncamento a un particolare limite del doppio potrebbe soddisfare la maggior parte delle esigenze. –
Bel esempio. Ho risolto un problema simile usando 'table()' (qui puoi usare 'table (numbersMirror)'). la tabella sembra arrotondare i numeri. Non ho dettagli su come va, ma per il tuo esempio sembra funzionare. Ad ogni modo: un datatype decimale dovrebbe essere più preciso. (ovviamente solo per operazioni -/+). @DWin: Penso che intendessi 'round()' invece di troncare. –