R:将 Sys.now() 转换为带微秒的纪元时间戳

R: Convert Sys.now() to epoch timestamp with microseconds

我想在 R 中将当前时间转换为带微秒的纪元时间戳。为此,我运行 遵循代码。

options(digits.secs = 6)
now = Sys.time()    
as.double(now)

当我简单地打印 now 时,输出是 "2017-11-11 20:40:18.370305 CET",它捕获微秒,但是当我使用 as.double(now) 将其转换为纪元时间戳时,微秒精度消失了。结果只有1510429218。如何保留微秒?

你(总是)有它们,但你需要告诉 print 使用更多数字:

R> n <- Sys.time()
R> print(as.numeric(n), digits=16)    ## digits matters here
[1] 1510432192.721936
R> n
[1] "2017-11-11 14:29:52.721935 CST"
R> 

了解了 R 如何非常困难地处理十进制数字!请参阅以下代码。

options(digits.secs = 6)    
a = c(as.double(Sys.time()), as.double(Sys.time()), as.double(Sys.time()))
print(a)

此代码的输出如下。

[1] 1510430216 1510430216 1510430216

时间戳似乎失去了微秒精度。但是当数据写入文件或导出时,十进制数字是可见的。

df = data.frame(a)
write.csv(x = df, file = "test.csv")

文件内容为:

1 1510430215.888998
2 1510430215.889942
3 1510430215.889942

要同时查看 R session/console 中的小数位,需要更改可见性选项。

options(digits = 16)
print(a)

现在所有小数位在 R 会话中也可见!

[1] 1510430215.888998 1510430215.889942 1510430215.889942

默认显示位数只有7位,所以如果大于7位,R直接选择舍弃小数位显示!这很荒谬,因为它造成了巨大的混乱。至少保留一到两位小数。