gpt4 book ai didi

r - 数据表中的内存限制:不允许负长度向量

转载 作者:行者123 更新时间:2023-12-03 22:46:00 25 4
gpt4 key购买 nike

我有一个包含多个社交媒体用户及其关注者的数据表。原始数据表具有以下格式:

X.USERID FOLLOWERS
1081 4053807021,2476584389,4713715543, ...


因此,每一行都包含一个用户以及他/她的ID和一个跟随者矢量(用逗号分隔)。我总共拥有24,000个唯一的用户ID和160,000,000个唯一的关注者。我希望将原始表转换为以下格式:

X.USERID          FOLLOWERS
1: 1081 4053807021
2: 1081 2476584389
3: 1081 4713715543
4: 1081 580410695
5: 1081 4827723557
6: 1081 704326016165142528


为了获得此数据表,我使用了以下代码行(假设我的原始数据表称为dt):

uf <- dt[,list(FOLLOWERS = unlist(strsplit(x = FOLLOWERS, split= ','))), by = X.USERID]


但是,当我在整个数据集上运行此代码时,出现以下错误:

不允许负长度向量

根据这篇关于堆栈溢出( Negative number of rows in data.table after incorrect use of set)的文章,似乎我碰到了data.table中该列的内存限制。解决方法是,以较小的块(每10,000个)运行代码,这似乎可行。

我的问题是:如果更改代码,是否可以防止发生此错误,或者我是否碰到R的限制?

PS。我有一台可以使用140gb RAM的计算机,因此物理内存空间不应该成为问题。

> memory.limit()
[1] 147446

最佳答案

当数据集中的行数超过R的2 ^ 32-1的限制时,会发生此问题。
解决此问题的方法之一是分块读取(循环内)数据集。
看来您的文件是按X.USERID字段排序的,因此您的块(读取文件时)应与唯一关注者的数量重叠,以确保每个用户至少属于一个包含所有关注者的块。
处理这些大块的方式在很大程度上取决于您需要对数据进行的处理。

关于r - 数据表中的内存限制:不允许负长度向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842263/

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