R data.table中的列槽
我有一个数据集R data.table中的列槽,r,data.table,R,Data.table,我有一个数据集x,有350m行和4列。从一个包含13m行和19列的数据集i连接两列时,我遇到以下错误: Internal logical error. DT passed to assign has not been allocated enough column slots. l=4, tl=4, adding 1 我已经检查过了,但问题似乎出在列的数量上。因为我只有几个,如果这就是问题所在,我会感到惊讶 此外,我还发现,错误与“列槽”有关,但我不理解它们是什么。检查truelength时,
x
,有350m行和4列。从一个包含13m行和19列的数据集i
连接两列时,我遇到以下错误:
Internal logical error. DT passed to assign has not been allocated enough column slots. l=4, tl=4, adding 1
我已经检查过了,但问题似乎出在列的数量上。因为我只有几个,如果这就是问题所在,我会感到惊讶
此外,我还发现,错误与“列槽”有关,但我不理解它们是什么。检查truelength时,我获得
> truelength(x)
[1] 0
> truelength(i)
[1] 0
我的理解是设置,例如,
alloc.col(x,32)
或alloc.col(i,32)
,或两者都可以解决问题。然而,我不明白这是怎么回事,也不明白问题是什么。有人能解释一下吗?部分原因是数据。table
在内存使用方面非常有效(而base
数据。帧在常规使用中往往会被左右复制,例如设置名称(DF)=col_names
实际上可以复制所有DF
,尽管只操作对象的属性)
反过来,部分原因是data.table
总是在内存中分配一定的大小,以便更流畅地添加/减去列指针(从内存的角度来看)
因此,当实际列贪婪地占用内存时(当它们被创建时,声称有足够的内存来存储nrow(DT)
-大小向量),列指针,它存储查找实际数据的地址(如果你不知道指针的详细信息,你可以想到这个~like~列名),创建时具有固定的内存插槽
alloc.col
强制执行列指针地址保留过程;这在两种情况下最常用:
您的数据需要很多列(默认情况下,分配给1024个指针的空间比定义中的列多)
您已从RDS加载数据(因为readRDS
/load
不知道为数据分配此内存。表
加载后,我们必须自己触发此操作)
我认为弗兰克是对的,你正在经历后者。有关更多详细信息,请参见?alloc.col
,但在大多数情况下,您应该只运行alloc.col(x)
和alloc.col(i)
——除了高度受限的机器之外,分配1024个列指针需要相对较少的内存,所以你不应该花太多的精力去浏览和试图找出正确的数量。部分原因是数据。table
在内存使用方面非常有效(而base
数据。帧
通常会被左右复制,例如设置名称(DF)=col_names
实际上可以复制所有DF
,尽管只操作对象的属性)
反过来,部分原因是data.table
总是在内存中分配一定的大小,以便更流畅地添加/减去列指针(从内存的角度来看)
因此,当实际列贪婪地占用内存时(当它们被创建时,声称有足够的内存来存储nrow(DT)
-大小向量),列指针,它存储查找实际数据的地址(如果你不知道指针的详细信息,你可以想到这个~like~列名),创建时具有固定的内存插槽
alloc.col
强制执行列指针地址保留过程;这在两种情况下最常用:
您的数据需要很多列(默认情况下,分配给1024个指针的空间比定义中的列多)
您已从RDS加载数据(因为readRDS
/load
不知道为数据分配此内存。表
加载后,我们必须自己触发此操作)
我认为弗兰克是对的,你正在经历后者。有关更多详细信息,请参见?alloc.col
,但在大多数情况下,您应该只运行alloc.col(x)
和alloc.col(i)
——除了高度受限的机器之外,分配1024个列指针需要相对较少的内存,因此,您不应该花费太多的精力来略读和试图找出正确的数量。您熟悉vignette(“datatable常见问题解答”)中关于“从RDS或RData文件读取data.table”的注释吗?根据我的经验,truelength 0来自加载的表。当然?alloc.col
可能是一个可以查看的地方,如果您想知道它的功能,谢谢,我会查看常见问题解答。我确实阅读了有关这些函数的文档,但我不明白这些插槽是什么。您是否熟悉vignette(“datatable faq”)
中关于“从RDS或RData文件读取data.table”的说明?根据我的经验,truelength 0来自加载的表。当然?alloc.col
可能是一个可以查看的地方,如果您想知道它的功能,谢谢,我会查看常见问题解答。我确实阅读了关于这些函数的文档,但我不明白这些插槽是什么。