【发布时间】:2023-04-09 02:39:01
【问题描述】:
我有一个包含 57m 条记录和 9 列的 data.table,当我尝试运行一些摘要统计信息时,其中之一会导致问题。违规列是一个具有 3699 个级别的因素,我收到以下代码行的错误:
> unique(da$UPC)
Error in unique.default(da$UPC): hash table is full
现在显然我只会使用:levels(da$UPC),但我试图将每个组中存在的唯一值计算为 data.table 组语句中多个 j 参数/计算的一部分。
有趣的是 unique(da$UPC[1:1000000]) 按预期工作,但 unique(da$UPC[1:10000000]) 没有。鉴于我的表有 57m 条记录,这是一个问题。
我尝试将因子转换为字符,如下所示没有问题:
da$UPC = as.character(levels(da$UPC))[da$UPC]
unique(da$UPC)
这样做确实向我展示了一个额外的“级别”,即NA。因此,因为我的数据在因子列中有一些 NA,所以 unique 函数无法工作。我想知道这是否是开发人员知道需要修复的东西?我在 r-devel 上找到了以下可能相关的文章,但我不确定,它没有提到 data.table。
Linked article: unique(1:3,nmax=1) freezes R!
sessionInfo:
R version 3.0.1 (2013-05-16)
Platform: x86_64-unknown-linux-gnu (64-bit)
locale:
[1] LC_CTYPE=C LC_NUMERIC=C
[3] LC_TIME=en_US.iso88591 LC_COLLATE=C
[5] LC_MONETARY=en_US.iso88591 LC_MESSAGES=en_US.iso88591
[7] LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.iso88591 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] plyr_1.8 data.table_1.8.8
【问题讨论】:
-
请发布您的
sessionInfo()和一个可重现的示例(尽管有链接)。 -
查看
unique.default,错误一定来自factor(z, levels...这一行,因为它是作为字符工作的。 -
好的,我已经发布了
sessionInfo,但是制作一个可重复的示例需要更长的时间。 -
不清楚这与data.table有什么关系。你打电话给
unique(a vector),正如Senor指出的那样,unique.default。 -
正确@Arun,我将删除data.table标签。