为什么“数字通常是首选因素”在data.table中为key?

时间:2013-08-18 23:48:30

标签: r data.table

来自data.table手册:

  

事实上,我们非常喜欢data.table包含计数排序   使用R的内部全局字符串的字符向量算法   缓存。对于包含许多的字符向量,这尤其快   重复,例如键列中的分组数据。这意味着   角色通常比较重要。因素仍然充分   支持,特别是有序因素(水平不在其中)   字母顺序)。

factor不是counting sort只是character比{{1}}更容易做整数吗?

1 个答案:

答案 0 :(得分:9)

  

不是因子只是整数,应该更容易进行计数排序   比起角色?

是的,如果你已经给了一个因素。但是创造这个因素的时间可能很重要,这就是setkey(和临时by)的目标。尝试在随机排序的字符向量上计时factor(),例如1e6长,1e4级别。然后在原始随机排序的字符向量上与setkey或ad hoc by进行比较。

agstudy的评论也是正确的;即,字符向量(指向R缓存字符串的指针)与因素非常相似。在32位系统上,字符向量与因子的整数向量大小相同,但该因子具有存储(有时也可以复制)的levels属性。在64位系统上,指针是两倍大。但另一方面,R的字符串缓存可以直接从字符向量指针中查找,而该因子通过级别有一个额外的跃点。 (levels属性也是R字符串缓存指针的字符向量。)