首页 文章

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

提问于
浏览
7

data.table 手册:

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

是不是 factor 只是整数,应该比 character 更容易做 counting sort

1 回答

  • 9

    不是因素只是整数,应该更容易计数排序而不是字符?

    是的,如果你 setkey (和ad hoc by )的目标是击败 . 尝试在随机排序的字符向量上计时 factor() ,例如1e6长,1e4级别 . 然后在原始随机排序的字符向量上与 setkey 或ad hoc by 进行比较 .

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

相关问题