为什么在某些情况下随时返回NA
问题描述:
为什么随时在第一种情况下返回NA,而在第二种情况下为何返回有效结果。为什么在某些情况下随时返回NA
str(A$X1)
int [1:23744] 1487319525 1487323025 1487325865 1487332405 1487334780 1487353675 1487354135 1487354185 1487354195 1487354215 ...
> anytime(A$X1[1])
[1] NA
> anytime(1487319525)
[1] "2017-02-17 02:18:45 CST"
答
这是integer
和numeric
之间的差异。请注意,您的向量列为integer
。
所以见证:
R> library(anytime) R> R> ivec <- c(1487319525L, 1487323025L, 1487325865L) R> str(ivec) int [1:3] 1487319525 1487323025 1487325865 R> anytime(ivec) [1] NA NA NA R> R> fvec <- as.numeric(ivec) ## convert to numeric R> str(fvec) num [1:3] 1.49e+09 1.49e+09 1.49e+09 R> anytime(fvec) [1] "2017-02-17 02:18:45 CST" "2017-02-17 03:17:05 CST" "2017-02-17 04:04:25 CST" R>
在这里,我们辗转腾挪。 数字如果在一定范围内,则取值为POSIXct
。因为C++是强类型的,所以你的整数向量确实可以做到这个测试。
而且,我们不能只是转换integer
到numeric
,我们靠这个工作太:
R> anytime(20170217)
[1] "2017-02-17 CST"
R>
编辑:我屈服了。 github当前的开发版本确实如此:
R> library(anytime)
R> ivec <- c(1487319525L, 1487323025L, 1487325865L)
R> anytime(ivec)
[1] "2017-02-17 02:18:45 CST" "2017-02-17 03:17:05 CST" "2017-02-17 04:04:25 CST"
R>
您能设置一个整数> 4000000000L的检查,然后将被视为推定时间? –
也许吧。也许不会。它可能有副作用。但是如你所知,这个软件包是开源的,并且有一个测试套件,所以你也可以试试它。我知道,拥有POSIXct值的'integer'类型的变量非常罕见...因为后者是一个'numeric'。正如我演示的,很容易转换回'数字'。 –
我添加了一个[新的分支](https://github.com/eddelbuettel/anytime/tree/feature/large_ints),它可能会成为一个新功能。 –