R 在对列执行操作后,Data.table大小增加

R 在对列执行操作后,Data.table大小增加,r,data.table,R,Data.table,我有一个大小为900Mb的data.tablescore。有一列datetime,基本上是格式的datetime(“2018-05-25 10:10:53:000000”)。我正在尝试使用以下代码将此特定列的类字符转换为POSIXlt: score[,newdate := as.POSIXlt.character(score[["datetime"]],tz="IST",format="%Y-%m-%d %H:%M:%S")][,datetime:=NULL] 此操作将呈现大小为211 GB的

我有一个大小为900Mb的data.table
score
。有一列
datetime
,基本上是
格式的datetime(“2018-05-25 10:10:53:000000”)
。我正在尝试使用以下代码将此特定列的类
字符
转换为
POSIXlt

score[,newdate := as.POSIXlt.character(score[["datetime"]],tz="IST",format="%Y-%m-%d %H:%M:%S")][,datetime:=NULL]
此操作将呈现大小为211 GB的data.table。这里发生了什么。请帮忙

dput(head(score))

structure(list(id1 = c(12234398L, 323437283L, 12343344L, 
545465653L, 312342343L, 22344232L), id2 = c(216231535L, 
324345453L, 345474698L, 87787950L, 656565531L, 565656657L), 
Score = c(756L, 777L, 788L, 234L, 656L, 788L), datetime = c("2017-05-08 00:00:00.0000000", 
"2018-07-12 01:24:46.0000000", "2015-16-02 00:00:00.0000000", 
"2016-03-22 23:06:45.0000000", "2016-07-14 12:23:45.0000000", 
"2014-05-03 03:33:13.0000000")), .Names = c("id1", 
"id2", "Score", "datetime"), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 
0x190cc98>)
dput(头(分数))
结构(列表)(id1=c(12234398L、323437283L、12343344L、,
545465653L,312342343L,22344232L),id2=c(216231535L,
3243453L、345474698L、87787950L、6565531L、56657L),
分数=c(756L,777L,788L,234L,656L,788L),日期时间=c(“2017-05-08 00:00:00.0000000”,
"2018-07-12 01:24:46.0000000", "2015-16-02 00:00:00.0000000", 
"2016-03-22 23:06:45.0000000", "2016-07-14 12:23:45.0000000", 
“2014-05-03 03:33:13.0000000”),.Names=c(“id1”,
“id2”,“Score”,“datetime”),class=c(“data.table”,
“data.frame”),row.names=c(NA,-6L),.internal.selfref=)
指的是这个

data.table
不接受
POSIXlt
列。您可以使用
POSIXct
而不是
POSIXlt

score[, newdate := as.POSIXct(datetime, tz = "IST", format = "%Y-%m-%d %H:%M:%S")][, datetime := NULL]

解释一下,为什么
data.table
增长如此之快:

d <- as.POSIXlt.character("2017-05-08 00:00:00.0000000", ,tz="IST",format="%Y-%m-%d %H:%M:%S")
d
object.size(d) # 2024 Bytes in my configuration
# 2024 bytes

d您没有因为
tz=“IST”
?@MKR收到任何警告吗?没有。为什么您认为它应该发出警告?我想这可能是你的问题。@TUSHAR我想问题在于
score[[“datetime”]]
的使用。它创造了自我参照。为什么你不能用
datetime
来代替呢?@MKR这不是问题,而是
POSIXlt
格式。非常感谢。这很有效。事实上,这导致了数据表大小的减小。谢谢你的解释。我在@zacdav共享的一个链接中读到,每个POSIXlt元素占用大约40字节的内存。