这与RSQLite typecasting issue有些相关。
考虑以下示例:
> 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,尽管类型被正确识别为&#34; real&#34;!这非常令人困惑 - 类型是正确的,但从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中,它被正确地保存为&#34;真实&#34;
> str(part.DF)
'data.frame': 1 obs. of 3 variables:
$ X1 : int 2
$ X2 : num 0.1
$ typeof(x2): chr "real"
为什么?