1

这与RSQLite 类型转换问题有些相关。

考虑以下示例:

> require(RSQLite)
> DB = dbConnect(RSQLite::SQLite(),":memory:")

> dbSendQuery(DB,"create table tbl (X1 INT, X2 INT)")
> dbSendQuery(DB,"insert into tbl values (1,1),(2,0.1)")

> all.DF <- dbGetQuery(DB,"select *, typeof(X2) from tbl")
> part.DF <- dbGetQuery(DB,"select *, typeof(x2) from tbl where X1 NOT IN (1)")

打电话

> part.DF

X1  X2   typeof(x2)
2   0.1  real

> all.DF

X1 X2 typeof(X2)
1  1  integer
2  0  real

你看到问题了,对吧?在 part.DF 中,第二个值正确为 0.1,而在 all.DF 中,第二个值为 0,尽管类型被正确识别为“真实”!这非常令人困惑 - 类型是正确的,但是从 SQLite 到 R 值 0.1 的某个地方显然变成了整数:

> str(all.DF)

'data.frame':   2 obs. of  3 variables:
 $ X1        : int  1 2
 $ X2        : int  1 0
 $ typeof(X2): chr  "integer" "real"

而在 part.DF 中,它被正确地保持为“真实”

> str(part.DF)

'data.frame':   1 obs. of  3 variables:
$ X1        : int 2
$ X2        : num 0.1
$ typeof(x2): chr "real"

为什么?

4

0 回答 0