我在R中使用大型data.table对象时遇到问题 我发现data.table对象的内存地址在某些情况下没有复制或更改。例如,
library(data.table)
create_dt <- function(nrow=5, ncol=5, propNA = 0.5){
v <- runif(nrow * ncol)
v[sample(seq_len(nrow*ncol), propNA * nrow*ncol)] <- NA
data.table(matrix(v, ncol=ncol))
}
# helper function to make large data.table
# create_dt source: http://stackoverflow.com/questions/23898969/is-data-really-copied-four-times-in-rs-replacement-functions
d0 = create_dt(3e5, 1058, 0.1)
tracemem(d0) #1
d0[, new:=0][is.na(V1000), new1:=1]
table(d0$new1)
tracemem(d0) #2
大多数情况下,2 tracemem(d0)打印相同的地址。 但有时,打印地址会发生变化。 当这种情况发生时,所有new1列的数据都变为0。 因为它是随机发生的,所以我无法使其完全可重复。 但我对上面的代码有同样的问题。
我认为当我在笔记本中使用大容量内存时会更频繁地引起这种情况(例如,许多chrome标签,同时使用许多其他应用程序。)
我正在使用带有RAM 64G,HDD 1T的Windows 7。和R 3.3.2,使用data.table 1.10.2。该平台是x86_64-w64-mingw32。
有人和我一起遇到同样的问题吗?有谁知道为什么会这样,有什么解决方案? 谢谢。