使用`data.table`包时,我有些不确定何时需要使用`setkey()`。例如,当使用具有`by`选项的`:=`运算符时,即使我没有设置键值,事情似乎仍然非常快速。请问何时需要使用`setkey()`以及何时不需要?如果在调用`:=`之前不需要使用`setkey()`,那么`data.table`包是如何如此快速的呢?因为它可能必须执行与标准`data.frame` R中的`apply`相同的操作,即进行顺序搜索而不是二进制搜索,因为它不知道我的`data.table`是否实际上已按`by`参数排序。
谢谢
ad hoc by
之所以快速,是因为它也使用了基数排序吗? - colinfangby
对于整数列使用基数排序来查找分组,因此它取决于类型和正在进行“by”操作的列数。一旦它找到了分组,群集化变得快速是因为内存为最大群组一次性分配,然后重复使用所有群组。并且仅用于j
需要的列。请参见 FAQ 3.1。尝试使用verbose=TRUE
模式,因为它会显示花费在查找群组(包括基数排序)与迭代它们上的时间量。 - Matt Dowle