2016-05-08 2 views
0

Je suis un nouvel utilisateur de R, j'ai un objet de type 'double', mais quand j'obtiens is.numeric (X) il retourne FALSE, comment est-ce possible? Il me semble que X étant une liste de nombres doubles, il devrait aussi être de type numérique. N'est-ce pas?R: le type de X est double mais as.numeric (X) est FALSE?

Voici l'exemple:

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' ne doit pas être de retour des valeurs logiques. Etes-vous sûr de ne pas utiliser 'is.numeric'? Et ... qu'est ce que 'class (objet)'? –

+0

Merci, c'était une faute de frappe, j'ai édité la question – Alex

+2

Eh bien, dans R 'double' est un synonyme de 'numérique' donc vous avez vraiment besoin d'afficher un exemple reproductible. –

Répondre

4

Si vous utilisez dput sur l'objet (ce qui est l'une des meilleure façon de déterminer les structures internes de R, bien que la fonction str sert aussi bien dans de nombreux cas) .... vous pouvez voir qu'il a de la classe « difftime »:

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

en R, il est le class qui détermine l'envoi de la fonction et les résultats de la fonction. La fonction typeof renvoie une information de niveau inférieur. Les vecteurs de facteur retournent également "numérique" de typeof mais FAUX de is.numeric(). Vous auriez pu de manière significative sous la contrainte que la valeur à « numérique » (= « double ») avec as.numeric:

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

Alors pourquoi typeof et classe retournent deux choses différentes? (Double, difftime) – Alex

+1

Ouais je suppose que 'as.numeric()' est plus intuitif que 'c()' :) –

+1

@Alex - Parce que l'un est le type et la classe . Ils ne sont pas la même fonction. –