lubridate 1.7.3错误:CCTZ:输入向量的无法识别的时区:""

时间:2018-04-06 16:31:32

标签: r timezone lubridate

我刚刚安装了最新版本的lubridate(1.7.3),并收到以下错误

> x <- as.POSIXct("2014-06-01 08:21:59 BST")
> for (j in 1:1e4){
     dum <- lubridate::force_tz(x, tzone = 'UTC')
 }
> for (j in 1:1e8){
     dum <- lubridate::force_tz(x, tzone = 'UTC')
 }
Error in C_force_tz(time, tz = tzone, roll) : 
  CCTZ: Unrecognized timezone of the input vector: ""
> j
[1] 580

奇怪的是,如果我在第一次循环后继续使用1e4,我就无法得到它,如果我从1e8开始,我就无法得到它。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

现在已经在luridate https://github.com/tidyverse/lubridate/commit/c4636354e72ce1e6c427784cca94292b58a9271b的github版本中解决了这个问题。

他们希望本周发布修复

答案 1 :(得分:-1)

我试着按照你说的方式做到这一点,并且循环甚至不会通过所有1e8值而不会崩溃我的机器(这是非常强大的,所以这是一个惊喜) 。另外,我注意到生成的原始dum只有一个日期,其余的都是NA

这会做你需要的同样的事情吗?我猜你需要用Date个对象初始化一个向量。它对我来说非常快:

> dum <- rep(lubridate::force_tz(x, tzone = 'UTC'),100000000)
> str(dum)
   POSIXct[1:100000000], format: "2014-06-01 08:21:59" "2014-06-01 08:21:59" "2014-06-01 08:21:59" "2014-06-01 08:21:59" ...
> system.time(rep(lubridate::force_tz(x, tzone = 'UTC'),100000000))
   user  system elapsed 
   0.31    0.24    0.55