Sqldf: изменение временной отметки с локального времени до GMT/UTC

На моей машине sqldf изменяет POSIXct с локального времени (я на CST, GMT -0600) до GMT/UTC. Это ожидаемое поведение? Могу ли я остановить R или sqldf от этого? Вот мой код:

> library('sqldf')
> 
> before <- data.frame(ct_sys = Sys.time())
> before
 ct_sys
1 2012-03-01 12:57:58
> after <- sqldf('select * from before')
> after
 ct_sys
1 2012-03-01 18:57:58
>
1 ответ

Кажется, это ошибка часового пояса в sqldf. Он должен быть исправлен теперь в sqldf версии 0.4-6.2 (еще не на CRAN, но вы можете попробовать это следующим образом):

library(sqldf)
source("http://sqldf.googlecode.com/svn/trunk/R/sqldf.R")
before <- data.frame(ct_sys = Sys.time()); before
after <- sqldf('select * from before'); after

Даже без этого sqldf("select * from before", method = "raw") будет работать, хотя это вернет числовой столбец (который вы можете преобразовать в POSIXct) и может повлиять и на другие столбцы. Ниже приведен пример использования method = "raw". Заметим, что в обоих случаях мы получаем 1330661786.181:

> library(sqldf)
>
> before <- data.frame(ct_sys = Sys.time()); dput(before)
structure(list(ct_sys = structure(1330661786.181, class = c("POSIXct", 
"POSIXt"))), .Names = "ct_sys", row.names = c(NA, -1L), class = "data.frame")
>
> after <- sqldf('select * from before', method = "raw"); dput(after)
structure(list(ct_sys = 1330661786.181), .Names = "ct_sys", row.names = 1L, class = "data.frame")

EDIT: добавлен пример использования method = "raw"

licensed under cc by-sa 3.0 with attribution.