5

关于在特定数据集上调用 `write.table` 时崩溃 R的问题,我几乎可以通过在一个会话中R --vanilla保存一个大数据,在 Windows-64位上“可靠地”崩溃 64 位。data.table当我说差不多时,一旦发生(当向 IT 人员演示崩溃时!)我收到了消息

Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol,  :
  'getCharCE' must be called on a CHARSXP

在上面的问题中引用。

要使 RI 崩溃,只需保存(DT,“datatablefile.RData”)

然后在另一个可能是的 R 会话中--vanilla,我只是说...

load("datatablefile.RData")
write.csv(DT, file='datatablefile.csv')

然后会在一两分钟后崩溃。特别注意,如果我说它不会崩溃

load("datatablefile.RData")
library(data.table)
write.csv(DT, file='datatablefile.csv')

当我说类似的话

library(data.table)
N <- 1000
DT <- data.table(id=1:N, name=sample(letters, N, replace=TRUE))
save(DT, file='dttest.RData')

然后在另一个会话中

load('dttest.RData')
write.csv(DT, 'dttest.csv')

我不会撞车...

有可能与它有关的建议rbindlist(),所以

library(data.table)
N <- 10000000
DT1 <- data.table(id=1:N, name=sample(letters, N, replace=TRUE))
DT2 <- data.table(id=1:N, name=sample(letters, N, replace=TRUE))
DT <- rbindlist(list(DT1, DT2))
save(DT, file='dttest.RData')

请注意,我已经N <- 10000000在这台 32gb 机器上尝试过这个,它仍然可以正常工作......

有人建议可能是由于因素造成的?

library(data.table)
N <- 1000
DT1 <- data.table(id=1:N, name=sample(letters, N, replace=TRUE),
            code=as.factor(sample(letters[1:5], N, replace=TRUE)))
DT2 <- data.table(id=1:N, name=sample(letters, N, replace=TRUE),
            code=as.factor(sample(letters[1:5], N, replace=TRUE)))
DT <- rbindlist(list(DT1, DT2))
save(DT, file='dttest.RData')

str(DT)
Classes ‘data.table’ and 'data.frame':  20000000 obs. of  3 variables:
 $ id  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ name: chr  "v" "u" "t" "z" ...
 $ code: Factor w/ 5 levels "a","b","c","d",..: 2 5 4 2 2 1 2 3 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr> 

然后在另一个会话中

> load('dttest.RData')
> tables()
Error: could not find function "tables"
> str(DT)
Classes ‘data.table’ and 'data.frame':  20000000 obs. of  3 variables:
 $ id  : int  1 2 3 4 5 6 7 8 9 10 ...
 $ name: chr  "v" "u" "t" "z" ...
 $ code: Factor w/ 5 levels "a","b","c","d",..: 2 5 4 2 2 1 2 3 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr> 
 > write.csv(DT, 'dttest.csv')

然后工作正常...

当我写一个data.table可以包含 chr、num、Date 但包含 Factors 时似乎失败的大文件时,这似乎很好......

关于我如何弄清楚如何创建一个如何复制它的可靠演示的任何建议?表格本身的内容是高度机密的。

更新 我刚刚尝试过

   setkey(DT,id)

但这并没有导致崩溃。

4

0 回答 0