我想将当前时间转换为R中的微秒的纪元时间戳。为此,我运行以下代码。
options(digits.secs = 6)
now = Sys.time()
as.double(now)
当我只是打印now
时,输出为"2017-11-11 20:40:18.370305 CET"
,它捕获的是微秒,但是当我使用as.double(now)
将其转换为纪元时间戳时,微秒精度就消失了。结果只有1510429218
。如何保留微秒?
答案 0 :(得分:0)
你(总是)拥有它们,但你需要告诉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>
答案 1 :(得分:0)
了解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会话/控制台中的小数位数,还需要更改可见性选项。
options(digits = 16)
print(a)
现在所有十进制数字也在R会话中可见!
[1] 1510430215.888998 1510430215.889942 1510430215.889942
默认显示位数仅为7.因此,如果数字大于该数字,则R只选择丢弃显示的十进制数字!这是荒谬的,因为它造成了大量的混乱。至少应保留一个或两个十进制数字。