有没有办法从对象(数据框,矩阵,向量)中选择子集而不复制所选数据?
我使用相当大的数据集,但从不更改它们。然而,为方便起见,我选择要操作的数据子集。每次制作大型子集的副本都是内存效率低下的,但正常索引和subset
(以及xapply()
函数族)都会创建所选数据的副本。所以我正在寻找可以解决这个问题的功能或数据结构。
一些可能符合我需求的方法,希望在一些R包中实现:
xapply()
不会创建子集的类似物。答案 0 :(得分:7)
尝试套餐ref。具体来说,它是refdata
类。
关于data.table
可能缺少的是,在分组(by=
参数)时,不会复制数据子集,因此速度很快。 [从技术上来说,它们只是进入一个共享的内存区域,可以为每个组重用,并使用memcpy进行复制,这比C中的循环快得多。]
:=
中的 data.table
是修改data.table
的一种方法。 data.table
偏离了通常的R编程风格,因为不是写入时复制。用户必须明确调用copy()
来复制(可能非常大)的表,即使在函数内也是如此。
你是对的,refdata
内置了data.table
这样的机制。我明白你的意思了,这将是一个很好的功能。 refdata
data.table
应该适用于data.frame
,tracemem(DF)
可能会很好(但请务必使用idata.frame
监控副本。)
您可以尝试在data.frame
个包中添加plyr
(不可变{{1}})。