1

我正在使用 RJDBC (DBI) 连接到 H2 数据库。由于调用 dbReadTable 或 dbGetQuery 函数,数据库中为空的字段在 R 数据帧中被隐式转换为 0。

我一直在努力寻找这方面的任何文档,但至少从使用 RJDBC 连接到 mysql 数据库的人那里找到了另一个对该问题的引用,所以我目前不认为问题出在 H2 上。

我更喜欢数据库值为空的 NA 或 NULL。是否有一些可选参数或其他方法可以防止 R 中带有 DBI 的 RJDBC 驱动程序隐式替换数据库空值?

编辑:这似乎只发生在数字类型的列上。转换为因子的基于 VARCHAR 的列似乎具有数据库 NULL 的 NA。隐式 0 转换是 RJDBC 处理数字列中的 NULL 的已知错误(或危险特性)吗?

4

2 回答 2

1

正如您所指出的,这似乎是 RJDBC 的问题。在RH2 软件包的 0.1-2.3 版本中实施了一种解决方法(最近上传到 CRAN,现在刚刚在 CRAN 和镜像中可用)。

于 2011-03-07T18:08:53.263 回答
1

事实证明,隐式 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-10T16:16:25.903 回答