我使用RJDBC(DBI)连接到H2数据库。数据库中为空的字段在R数据帧中被隐式转换为0,这是由调用dbReadTable或dbGetQuery函数产生的。
我一直在努力找到关于此问题的任何文档但是至少找到了一个使用RJDBC连接到mysql数据库的问题的其他参考文献,因此我目前不希望问题与H2有关。
我更喜欢NA或NULL,其中数据库值为null。是否有一些可选参数或其他方法可以防止R中的DBI的RJDBC驱动程序隐式替换数据库空值?
编辑:这似乎只发生在具有数字类型的列上。转换为因子的基于VARCHAR的列似乎具有数据库NULL的NA。隐式0转换是RJDBC在数字列中处理NULL的已知错误(或危险特性)吗?
答案 0 :(得分:1)
正如您所指出的,这似乎是RJDBC的一个问题。解决方法在RH2 package的版本0.1-2.3中实现(最近上传到CRAN,现在只在CRAN和镜像上可用)。
答案 1 :(得分:1)
事实证明,隐式null to 0转换是JDBC API的一个“特性”,RJDBC是一个很薄的包装器。
http://download.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getDouble(int)
让我大吃一惊。
CRAN上可用的最新开发版本的RJDBC 0.1-6现在可以解决这种奇怪的行为,并正确返回数字SQL空值的NA。