默认情况下,当我dbGetQuery()
从DBI
包中使用它时,它会返回类型列integer64
作为.integer64
bit64
然后我dplyr
尝试过滤和操作我的结果,但遇到了dplyr
不支持类型对象的问题integer64
。
是否可以设置dbGetQuery()
将integer64
列作为类返回integer
?
DBI 规范通过bigint
参数提供此功能。支持显然会因驱动程序而异。
dbConnect(drv, bigint="integer", ...)
以下值的行为如下:
"integer": 总是返回整数,静默溢出
“numeric”:总是以数字形式返回,静默四舍五入
“字符”:始终将十进制表示形式作为字符返回
“integer64”:作为可以使用 as.integer()(溢出警告)、as.numeric() 和 as.character() 强制转换的数据类型返回
来源: https ://cran.r-project.org/web/packages/DBI/vignettes/spec.html#_specification_17
即使不完全支持 64 位整数(参见GitHub 问题),您仍然可以使用 dplyr 来改变integer64
:
library(dplyr, warn.conflicts = FALSE)
df <- data_frame(a = bit64::as.integer64(1:3), b = 1:3, c = 1.5:4)
df
#> # A tibble: 3 x 3
#> a b c
#> <S3: integer64> <int> <dbl>
#> 1 1 1 1.5
#> 2 2 2 2.5
#> 3 3 3 3.5
df %>% mutate_if(bit64::is.integer64, as.integer)
#> # A tibble: 3 x 3
#> a b c
#> <int> <int> <dbl>
#> 1 1 1 1.5
#> 2 2 2 2.5
#> 3 3 3 3.5