将 dbGetQuery 设置为 return integer64 作为整数

Set dbGetQuery to return integer64 as integer

默认情况下,当我使用 DBI 包中的 dbGetQuery() 时,它 returns 类型 integer64 的列作为 integer64 class的 bit64

然后我使用 dplyr 来尝试过滤和操作我的结果,但遇到了问题,因为 dplyr 不支持 integer64.

类型的对象

是否可以将 dbGetQuery() 到 return integer64 列设置为 class integer

即使没有完全支持 64 位整数(请参阅 GitHub issue),您仍然可以使用 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

DBI 规范通过 bigint 参数提供此功能。驱动程序之间的支持显然会有所不同。

dbConnect(drv, bigint="integer", ...)

以下值的行为如下:

"integer": always return as integer, silently overflow

"numeric": always return as numeric, silently round

"character": always return the decimal representation as character

"integer64": return as a data type that can be coerced using as.integer() (with warning on overflow), as.numeric() and as.character()

来源: https://cran.r-project.org/web/packages/DBI/vignettes/spec.html#_specification_17