2016-05-08 10 views
0

Ich bin ein neuer Benutzer von R, ich habe ein Objekt vom Typ 'double', aber wenn ich is.numeric (X) bekomme, gibt es FALSE zurück, wie ist es möglich? Es scheint mir, dass X eine Liste von doppelten Zahlen ist und auch vom numerischen Typ sein sollte. Ist es nicht? HierR: Typ von X ist doppelt aber as.numeric (X) ist FALSE?

ist das Beispiel:

student_ages <- difftime(strptime(rep("2016-05-01 00:28:15" , 3), "%Y-%m-%d %H:%M:%S"), strptime(rep("2015-03-01 00:28:15" , 3), "%Y-%m-%d %H:%M:%S") , units="days")/365 
typeof(student_ages) 
[1] "double" 
is.numeric(student_ages) 
[1] FALSE 
+1

'as.numeric' sollte nicht zurückkehren logische Werte: Sie könnten diesen Wert auf„numerisch“(=„double“) mit as.numeric Bedeutung gezwungen. Sind Sie sicher, dass Sie nicht 'is.numeric' verwendet haben? Und was ist 'class (object)'? –

+0

Danke, es war ein Tippfehler, ich habe die Frage bearbeitet – Alex

+2

Nun, in R 'Double' ist ein Synonym für 'numerisch', so dass Sie wirklich ein reproduzierbares Beispiel veröffentlichen müssen. –

Antwort

4

Wenn Sie dput auf dem Objekt (und dies ist einer der besten Art und Weise innere Strukturen von R zu bestimmen, obwohl die str Funktion dient auch auch in vielen Fällen) .... kann man sehen, dass es Klasse ‚difftime‘ hat:

> dput(student_ages) 
structure(c(1.16974885844749, 1.16974885844749, 1.16974885844749 
), units = "days", class = "difftime") 

In R ist die class die Funktion Dispatch und Funktionsergebnisse bestimmt. Die Funktion typeof gibt eine Information auf niedrigerer Ebene zurück. Faktorvektoren geben auch "numerisch" von typeof, aber FALSE von is.numeric() zurück.

> as.numeric(student_ages) 
[1] 1.169749 1.169749 1.169749 
+0

Warum gibt typeof und class zwei verschiedene Dinge zurück? (Double, difftime) – Alex

+1

Ja, ich denke 'as.numeric()' ist intuitiver als 'c()' :) –

+1

@Alex - Weil man den Typ und die Klasse hat . Sie sind nicht die gleiche Funktion. –

Verwandte Themen