我使用RJDBC (DBI)连接到一个H2数据库。在调用dbReadTable或dbGetQuery函数产生的R数据帧中,数据库中为空的字段将被隐式转换为0。
我一直在努力寻找任何关于这个问题的文档,但至少找到了一个来自使用RJDBC连接到mysql数据库的人的关于这个问题的参考资料,所以我目前不认为这个问题是与H2有关的。
我更喜欢数据库值为null的NA或NULL。是否有一些可选参数或其他方法可以防止R中具有DBI的RJDBC驱动程序隐式地替换数据库空值?
编辑:这似乎只发生在数值类型的列中。转换为因子的基于VARCHAR的列似乎具有用于数据库NULL的NAs。隐式0转换是RJDBC处理数值列中空值的已知错误(或危险特性)吗?
发布于 2011-03-11 00:16:26
事实证明,隐式的null到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。
发布于 2011-03-08 02:08:53
正如您所指出的,这似乎是RJDBC的一个问题。在RH2 package的0.1-2.3版本中实现了一个解决方法(最近上传到CRAN,现在可以在CRAN和镜像上使用)。
https://stackoverflow.com/questions/5222436
复制相似问题