Ale*_*lex 18 r apply dataframe data.table
使用data.table
包装时,我有点不确定何时需要setkey()
.例如,当使用:=
带有by
选项的运算符时,即使我没有设置键,事情似乎仍然非常快.有人可以在setkey()
必要时和不在时说明吗?如果在调用之前没有必要:=
,by
那么data.table
包是如此快速,因为大概它必须通过执行顺序搜索而不是二进制搜索来执行与apply
标准data.frame
R 相同的操作,因为它不知道我data.table
是否实际上按参数排序by
.
谢谢
Mat*_*wle 19
这两个常见问题似乎很接近:
3.2我没有大桌子上的钥匙,但分组仍然非常快.这是为什么?
data.table
使用基数排序.这比其他排序算法快得多.Radix仅适用于整数,请参阅?base::sort.list(x,method="radix")
.这也是setkey
快速的原因之一.如果没有设置密钥,或者我们按照与密钥不同的顺序进行分组,我们称之为ad hoc.3.3为什么密钥中的列按比ad hoc更快的分组?
因为每个组在RAM中是连续的,从而最小化页面提取,并且可以批量复制内存(memcpy
在C中)而不是在C中循环.
它没有说,也可能应该做的是,你需要一个非常大的数据集,其中每个组也非常大,在你注意到keyed和ad hoc之间的区别之前.像100组每组100MB(10GB data.table),如1e8行和13列.否则,首先没有必要setkey
,特别是因为那可能会变得繁重.
归档时间: |
|
查看次数: |
1583 次 |
最近记录: |