2010-12-08 9 views
2

as.doubleの変換が機能しているように見えますが、非整数を加算すると整数に切り捨てられます。たとえば、次のような設定です。RMySQLでフェッチされた整数列を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" 

これまでのところすべてが期待通りです。あなたはそれに0.5を追加しようとする。しかし、その後、それは二重のだと言うが、それは整数のように小数部分を切り捨て:私は本当にする必要が`total_time` int(32) default NULL

> 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" 

MySQLデータベース内の列ですこのベクトルにいくつかのジッタを加えて、これは私を狂わせるのです。どんな助けもありがとう。最後に、の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 

答えて

4

私は今愚か感じるが、これは数字が実際に小数部を持っていなかった場合であったと判明したが、それは私に原因​​に印刷されていませんでした.Rprofile

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

ストーリーのモラルは、あなたすべてを信用していないprint()

+0

+1それは私の提案@ダニエルです。あなたが*印刷*の精度をいくらか低下させることなく、あなたが実証した方法で作業するコードはありません。今あなたの '.Rprofile'からその指示文を取り除く良い時期になるでしょう...(あなた自身の答えを受け入れてください) –

+0

Rに少なくとも少数の10進数を表示するように指示する方法があればいいでしょう'digits'に関係なく、非整数の点を指します。 –

関連する問題