来自data.table
手册:
事实上,我们非常喜欢data.table包含计数排序 使用R的内部全局字符串的字符向量算法 缓存。对于包含许多的字符向量,这尤其快 重复,例如键列中的分组数据。这意味着 角色通常比较重要。因素仍然充分 支持,特别是有序因素(水平不在其中) 字母顺序)。
factor
不是counting sort
只是character
比{{1}}更容易做整数吗?
答案 0 :(得分:9)
不是因子只是整数,应该更容易进行计数排序 比起角色?
是的,如果你已经给了一个因素。但是创造这个因素的时间可能很重要,这就是setkey
(和临时by
)的目标。尝试在随机排序的字符向量上计时factor()
,例如1e6长,1e4级别。然后在原始随机排序的字符向量上与setkey
或ad hoc by
进行比较。
agstudy的评论也是正确的;即,字符向量(指向R缓存字符串的指针)与因素非常相似。在32位系统上,字符向量与因子的整数向量大小相同,但该因子具有存储(有时也可以复制)的levels属性。在64位系统上,指针是两倍大。但另一方面,R的字符串缓存可以直接从字符向量指针中查找,而该因子通过级别有一个额外的跃点。 (levels属性也是R字符串缓存指针的字符向量。)