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