2016-04-28 17 views
1

Ich vergleiche und ersetze (fehlende) Werte als Teil meiner Pipeline. Fehlende Werte sind in meiner data.table als markiert.Besteht die Gefahr, dass in R `-1L` anstelle von` -1` verwendet wird?

Besteht die Gefahr, dass -9L im Vergleich verwendet wird?

> x <- -9 
> typeof(x) 
[1] "double" 
> 
> y <- -9L 
> typeof(y) 
[1] "integer" 

Beispiel:

dfmelt[value == -9L, code := paste0("0", "0")] 

VERSUS:

dfmelt[value == -9, code := paste0("0", "0")] 
+1

Wenn der Typ von "Wert" ganzzahlig ist, spielt dies keine Rolle. Wenn es sich um ein zugewiesenes Doppel handelt, spielt es auch keine Rolle. Wenn es sich um ein Double und ein Ergebnis von Berechnungen handelt, sollten Sie ''=' sowieso nicht verwenden (aufgrund der Gleitkommazahlgenauigkeit). Und natürlich ist das Kodieren von "NA" -Werten als Zahl ein Zeichen von minderwertigem Software-Design. – Roland

+1

Für weitere Informationen über den obigen Kommentar und Gleitkommafehler, [dies ist einen Blick wert] (http://www.burns-stat.com/pages/Tutor/R_inferno.pdf). – alistaire

+0

@Roland Danke, kannst du deinen Kommentar als Antwort schreiben? Und leider arbeiten wir hier viel mit ASCII-Dateien. Sie kommen mit Kopfschmerzen! und danke Alistaire, ich habe schon einen Teil dieses Buches gelesen, vielleicht sollte ich weiter lesen :) – Bas

Antwort

1

Wenn die Art der value ganze Zahl ist, dies keine Rolle spielt. Wenn es sich um ein zugewiesenes Doppel handelt, spielt es auch keine Rolle. Wenn es sich um ein Double und ein Ergebnis von Berechnungen handelt, sollten Sie == trotzdem nicht verwenden (wegen floating point number precision). Und natürlich ist das Codieren von NA Werten als eine Zahl ein Zeichen von minderwertigem Softwaredesign.

Ich schlage vor, diese Werte zu NA während des Imports zu konvertieren:

read.table(text = "1,2,-9", sep = ",", na.strings = "-9") 
# V1 V2 V3 
#1 1 2 NA 

Dann sind Sie is.na und Vermeidung dieses Problems verwenden können.