我正在尝试从MySQL数据库中读取推文ID号到R中。这些是18位数字,在数据库中保存为BIGINT。
阅读时,发生了一些奇怪的事情:可能有20%的人显示的值比实际数字少1。这对我正在做的事情来说是一个问题。
这种变化似乎与数据来自MySQL的事实无关,更多的是由于数据长度为18位,因为如果我只是直接在R中为变量赋值,就会发生同样的事情。
一个易于复制的例子是:
options(scipen=20)
# This one changes
a <- 691363779729182721
a
[1] 691363779729182720
# This one doesn't change
b <- 691363809076711424
b
[1] 691363809076711424
问题1: 有没有办法阻止值随意改变?
我能弄清楚的明显解决方案(适用于我目前的目的)是将这些数字作为字符类数据读取。虽然从我在RMySQL的文档中可以看到,但是无法将BIGINT强制转换为字符 - 它是以double类读入的。
library(RMySQL)
con <- dbConnect(MySQL(), user='user', password='password', db_name='Twitter', host='localhost')
sql <- 'SELECT twitter_id FROM Original_tweets'
rs <- dbSendQuery(con, sql)
# Nothing like colClasses for this next step??
tweet_ids <- fetch(rs, n=-1)
我想我的另一个选择是修改数据库结构并将这些数字放入数据库中的CHAR字段。
我更愿意只从当前表中读取R值并让它们给出正确的值,如果可以实现的话。
如果它有所不同,我在OSX 10.11.3上运行R 3.2.3。
谢谢,