2017-07-18 3 views
3

standardmäßig, wenn ich dbGetQuery() vom DBI Paket verwenden es Spalten vom Typ integer64 als integer64 Klasse der bit64 zurückgibt.Set dbGetQuery zurückzukehren Integer64 als integer

Ich benutze dann dplyr zu versuchen und zu filtern und zu manipulieren meine Ergebnisse, aber in Probleme kommen als dplyr unterstützt keine Objekte des Typs integer64.

Kann dbGetQuery() so eingestellt werden, dass integer64 Spalten als Klasse integer zurückgegeben werden?

+0

Warum nicht nur auf ganze Zahl konvertieren nach 'dbGetQuery Aufruf()' anstatt es in diesem Stadium zu tun? –

+1

Ich denke, Ihre drei Optionen werden sein: (a) Michael schlägt vor, in ganzzahlige Post-Abfrage zu konvertieren; (b) benutze SQL's CAST (... als Integer32) in der Abfrage; oder (c) bringen Sie es zum Issue-Board für den ODBC-Treiber, den Sie verwenden (vielleicht ['odbc'] (https://github.com/rstats-db/odbc/issues)). Ich denke, Letzteres ist langfristig am besten geeignet, aber da 'Bit64' in R immer noch nicht global verwendet/akzeptiert wird, kann es ein harter Kampf sein. – r2evans

+1

"Warum nicht einfach nach dem Aufruf von dbGetQuery() in Integer konvertieren, statt es in dieser Phase zu tun?" Es wäre besser, es mit einem Argument oder etwas in dbGetQuery zu tun, aber es gibt keinen besseren Weg dann denke ich, dass ich muss – user1165199

Antwort

2

Auch ohne die volle Unterstützung von 64-Bit-Integer (siehe GitHub issue), können Sie immer noch verwenden dplyr weg mutieren von 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