Windows R data.table的write.csv()崩溃

Windows R data.table的write.csv()崩溃,windows,r,data.table,Windows,R,Data.table,说到这个问题,通过在一个会话中保存一个大的数据.table,我几乎可以“可靠地”在Windows-64位上崩溃64位R--vanilla。当我说,几乎,一旦发生了(当我向车里的人演示撞车时!),我就明白了 Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, : 'getCharCE' must be called on a CHARSXP 在上述问题中提到 要撞车,我只需要 保存(DT,“dat

说到这个问题,通过在一个会话中保存一个大的
数据.table
,我几乎可以“可靠地”在Windows-64位上崩溃64位
R--vanilla
。当我说,几乎,一旦发生了(当我向车里的人演示撞车时!),我就明白了

Error in .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol,  :
  'getCharCE' must be called on a CHARSXP
在上述问题中提到

要撞车,我只需要 保存(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')
我没有撞车

有人建议将其链接到
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')

但是它没有导致崩溃。

是的,如果您使用
rbindlist
创建大型
数据表,它很可能与
rbindlist
和因子相关联。这已在R-Forge上的v1.8.9中修复,请升级并重试。@MatthewDowle抱歉,Matthew,但在R-3.0.0或R-3.0.1中,很遗憾我无法复制此功能!恐怕我再也没有一个R2.2.3的拷贝了——这是一个受限的环境。如果你不能再复制它,肖恩考虑关闭这个问题。
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')
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')
   setkey(DT,id)