2010-12-08 4 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" 

지금까지 모든 것이 예상대로입니다.

> 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 데이터베이스의 열은 다음과 같습니다 : 당신이 그것에 0.5을 추가하려고하면하지만, 그것이 배의 그러나 그것은 정수와 같은 소수 부분을 잘라 말한다 `total_time` int(32) default NULL

정말 필요 이 벡터에 약간의 지터를 추가하십시오. 어떤 도움을 주시면 감사하겠습니다. 마지막으로, 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

은 지금 바보가 된 기분,하지만이 숫자는 소수 부분이 사실 한 경우였던 것으로 밝혀 있지만 인해로 options(digits=3) 인쇄되지 않는 한 내 .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 내 제안은 @Daniel이 될 것입니다. 왜냐하면 * 인쇄 *에서 정밀성을 떨어 뜨리지 않으면 서 시연 한 방식으로 작업 할 수있는 코드가 없기 때문입니다. 이제 당신의'.Rprofile'에서 그 지시어를 제거하는 좋은 시간이 될 것입니다 ... (직접 답을 받아들입니다.) –

+0

적어도 10 진수를 인쇄하도록 R을 알리는 방법이 있다면 좋을 것입니다 'digits'에 관계없이 비 - 정수 숫자를 가리킨다. –

관련 문제