我正在尝试在我正在使用的函数中获得一致的结果。但是,由于数组不记得时区信息,这比我预期的要困难一些。
> Sys.setenv(TZ = "")
> ISOdate(2015,1,1,1,tz='UTC')
[1] "2015-01-01 01:00:00 UTC"
> c(ISOdate(2015,1,1,1,tz='UTC'))
[1] "2015-01-01 02:00:00 CET"
> tz(c(ISOdate(2015,1,1,1,tz='UTC')))
[1] ""
如您所见,阵列会丢弃时区信息。这很烦人,因为其他函数如lubridate的day()会根据此时区信息改变行为。
因此我尝试了以下实验:
> Sys.setenv(TZ = "")
> Sys.getenv('TZ')
[1] ""
> x <- function(){
used_timezone <- Sys.getenv('TZ')
Sys.setenv(TZ = "UTC")
return(5)
Sys.setenv(TZ = used_timezone)
}
> Sys.getenv('TZ')
[1] ""
> x()
[1] 5
> Sys.getenv('TZ')
[1] "UTC"
原来,只有在return语句之前重置时区时才有效。
有没有一种快速的方法可以在一个函数中设置一个环境变量而不读取当前的一个并在每次返回之前重置它?