gpt4 book ai didi

r - 连接结果超过 2^31 行(内部 vecseq 达到物理限制)

转载 作者:行者123 更新时间:2023-12-02 04:34:26 25 4
gpt4 key购买 nike

我刚刚尝试在具有 64G 内存的计算机上合并 R 3.0.1 中的两个表,并收到以下错误。如有帮助,将不胜感激。 (data.table版本为1.8.8)

这是我的代码:

library(parallel)
library(data.table)

data1:数百万行3列。这些列是 tagprodvtag 有 750K 个唯一值,每个 tag 有 1 到 1000 个 prodprod 有 5000 个可能的值>。 v 取任意正实数值。

setkey(data1, tag)
merge (data1, data1, allow.cartesian=TRUE)

我收到以下错误:

Error in vecseq(f_, len_, if (allow.cartesian) NULL else as.integer(max(nrow(x), : Join results in more than 2^31 rows (internal vecseq reached physical limit). Very likely misspecified join. Check for duplicate key values in i, each of which join to the same group in x over and over again. If that's ok, try including j and dropping by (by-without-by) so that j runs for each group to avoid the large allocation. Otherwise, please search for this error message in the FAQ, Wiki, Stack Overflow and datatable-help for advice. Calls: merge -> merge.data.table -> [ -> [.data.table -> vecseq

显示 by-without-by 的新示例

country = fread("
country product share
1 5 .2
1 6 .2
1 7 .6
2 6 .3
2 7 .1
2 8 .4
2 9 .2
")
prod = fread("
prod period value
5 1990 2
5 1991 3
5 1992 2
5 1993 4
5 1994 3
5 1995 5
6 1990 1
6 1991 1
6 1992 0
6 1993 4
6 1994 8
6 1995 2
7 1990 3
7 1991 3
7 1992 3
7 1993 4
7 1994 7
7 1995 1
8 1990 2
8 1991 4
8 1992 2
8 1993 4
8 1994 2
8 1995 6
9 1990 1
9 1991 2
9 1992 4
9 1993 4
9 1994 5
9 1995 6
")

似乎完全不可能选择共享国家/地区标签的市场子集、找到这些对中的协方差并按国家/地区进行整理而不超出规模限制。这是迄今为止我最好的镜头:

setkey(country,country)
setkey(prod, prod, period)
covars <- setkey(setkey(unique(country[country, allow.cartesian=T][, c("prod","prod.1"), with=F]),prod)[prod, allow.cartesian=T], prod.1, period)[prod, ] [ , list(pcov = cov(value,value.1)), by=list(prod,prod.1)] # really long oneliner that finds unique market pairs from the the self-join, merges it with the second table and calculates covariances from the merged table.
clevel <-setkey(country[country, allow.cartesian = T], prod, prod.1)[covars, nomatch=0][ , list(countryvar = sum(share*share.1*pcov)), by="country"]
> clevel
country countryvar
1: 1 2.858667
2: 2 1.869667

当我对任何合理大小的数据尝试这种方法时,我遇到了 vecseq 错误。如果 data.table 在 2^31 的限制上没有那么犹豫,那就太好了。我是这个包的粉丝。关于如何使用更多 j 规范的建议也将不胜感激。 (鉴于我必须如何计算两个数据表交集的方差,我不确定如何尝试 J 规范)。

最佳答案

R 3.0.1 支持长度大于 2^31 - 1 的对象。虽然基础 R 附带的软件包已经可以创建此类对象,但贡献的软件包是否可以执行相同的操作取决于包裹。基本上,任何使用编译代码的包都必须重新编译并可能进行修改才能利用此功能。

此外,假设 64GB RAM 足以处理 60GB 对象,这有点乐观。

关于r - 连接结果超过 2^31 行(内部 vecseq 达到物理限制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com