2010-12-08 43 views
2

Eh bien, la conversion avec as.double semble fonctionner, mais l'ajout d'un nombre non intégral est tronqué en entier. Par exemple, ceci est la configuration:Colonne entière récupérée avec RMySQL ne peut pas être convertie en double

geo <- fetch.data.from.mysql(...) 
> head(geo$total_time) 
[1] 1586 165 5339 1586 2895 1178 
> typeof(geo$total_time) 
[1] "integer" 
> typeof(as.double(geo$total_time)) 
[1] "double" 

Jusqu'à présent, tout est comme prévu. Mais quand vous essayez d'ajouter 0,5 à, il dit que c'est un double mais il tronque la partie décimale comme un nombre entier:

> head(geo$total_time + 0.5) 
[1] 1586 166 5340 1586 2896 1178 
> head(as.double(geo$total_time) + 0.5) 
[1] 1586 166 5340 1586 2896 1178 
> typeof(geo$total_time + 0.5) 
[1] "double" 

La colonne dans la base de données MySQL est: `total_time` int(32) default NULL

Je dois vraiment ajouter de la gigue à ce vecteur, ce qui me rend fou. Toute aide serait appréciée. Enfin, sessionInfo():

> sessionInfo() 
R version 2.12.0 (2010-10-15) 
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] grid  stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] RMySQL_0.7-5 DBI_0.2-5  ggplot2_0.8.8 proto_0.3-8 reshape_0.8.3 plyr_1.2.1 

loaded via a namespace (and not attached): 
[1] tools_2.12.0 

Répondre

4

Je me sens stupide maintenant, mais cela se révèle avoir été un cas où les chiffres avaient effectivement la partie décimale, mais il n'a pas été imprimé en raison de options(digits=3) dans mon .

> options(digits=10) 
> head(geo$total_time + 0.5) 
[1] 1586.5 165.5 5339.5 1586.5 2895.5 1178.5 

Morale de l'histoire est: ne font pas confiance tout ce que vous print().

+0

+1 Cela allait être ma suggestion @Daniel, car il n'y a aucune raison pour que votre code fonctionne comme vous l'avez démontré sans impliquer un niveau de précision réduit dans * l'impression *. Maintenant serait le bon moment pour se débarrasser de cette directive de votre '.Rprofile' ... (Acceptez votre propre réponse en passant.) –

+0

Ce serait bien s'il y avait un moyen de dire à R d'imprimer au moins une décimale point pour les nombres non entiers, sans tenir compte des 'chiffres '. –