使用data.table
包时,我有点不确定何时需要setkey()
。例如,当使用:=
运算符和by
选项时,即使我没有设置密钥,事情似乎仍然非常快。有人可以解释什么时候setkey()
是必要的,什么时候不是?如果在调用:=
之前没有必要使用by
那么data.table
包是如此之快,因为大概它必须通过执行顺序搜索而不是二进制搜索而在标准data.frame
R中执行与apply
相同的操作,因为它没有知道我的data.table
是否实际按参数by
排序。setkey和:=运算符,data.table,R
感谢
太棒了,谢谢!正在挖掘FAQ,并且一定错过了这个。 – Alex 2012-07-20 19:32:21
'ad hoc by'是否快速,因为它也使用基数排序? – colinfang 2013-08-18 23:42:11
@colinfang很难回答这个问题,因为有几个功能。原因因查询和数据而异。 Ad hoc'by'确实使用基数排序来查找整数列的组,因此它取决于类型和有多少列正在被'取代'。然后一旦找到了这些组,分组速度快的一个原因是因为内存被分配给了最大的组,一次预先分配给所有组,然后被重用。只适用于'j'所需的列。参见FAQ 3.1。尝试'verbose = TRUE'模式,因为它揭示了花费多少时间找到组(比如基数排序)和迭代它们。 – 2013-08-19 20:23:23