为什么这个POSIXct或ITime失去了它的格式/属性

sta*_*ant 8 r data.table

这是我的示例数据,我不明白为什么该ITime列在使用该data.table包的以下代码中丢失了它的格式

DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
                               "2009-02-17 17:29:25.160")),
                y=c(1L,2L))
DT[,x1:=as.ITime(x)]
DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
DT
                         x y       x1     last.x last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 1234888163   62963
2: 2009-02-17 17:29:25.160 2 17:29:25 1234888165   62965
Run Code Online (Sandbox Code Playgroud)

但如果data.table已经知道如下的格式,它的工作原理

DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
                               "2009-02-17 17:29:25.160")),
                y=c(1L,2L))
DT[,x1:=as.ITime(x)]
DT[,`:=`(last.x=x,last.x1=x1)] #HERE DATA>TABLE KNOWS THE LAST.* FORMAT
DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
R) DT
                         x y       x1                  last.x  last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 2009-02-17 17:29:23.042 17:29:23
2: 2009-02-17 17:29:25.160 2 17:29:25 2009-02-17 17:29:25.160 17:29:25
Run Code Online (Sandbox Code Playgroud)

它必须是关于如何data.table分配的东西,有解决方法吗?

更新感谢Arun,现在已修复

R) library(data.table)
data.table 1.8.11  For help type: help("data.table")
R) DT = data.table(x=as.POSIXct(c("2009-02-17 17:29:23.042",
+                                "2009-02-17 17:29:25.160")),
+                 y=c(1L,2L))
R) DT[,x1:=as.ITime(x)]
R) DT[,`:=`(last.x=tail(x,1L),last.x1=tail(x1,1L)),by=y]
R) DT
                         x y       x1                  last.x  last.x1
1: 2009-02-17 17:29:23.042 1 17:29:23 2009-02-17 17:29:23.042 17:29:23
2: 2009-02-17 17:29:25.160 2 17:29:25 2009-02-17 17:29:25.160 17:29:25
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 2

更新:此问题已在 v1.8.11 中修复。来自新闻

:=(通过引用分配)分组时POSIXct丢失或ITime属性现在已修复,#2531。添加了测试。感谢 stat quant 在这里报告: Why does this POSIXct or ITime Loss its format/attribute并感谢 Paul Murray 在这里报告 SO: Cannot allocate columns as.Date by reference in data.table

如果我似乎忽略了某些事情,请回信。