2013-08-18 50 views
6

data.table手冊:爲什麼「字符通常更喜歡在data.table中考慮因素」?

事實上,我們喜歡它,以至於data.table包含計數排序 算法,使用R的內部全局字符串 緩存特徵向量。對於包含許多 重複項的字符向量(例如鍵列中的分組數據),這尤其快速。這意味着 字符通常是首選因素。因素仍然完全支持 ,特別是有序因素(其中水平不在 字母順序)。

是不是factor這應該是更容易做counting sortcharacter只是整數?

+7

我認爲這可以提供幫助來自data.table FAQ 2.17'由於全局字符串緩存被添加到R中,字符項是指向單個緩存的指針 字符串,並且不再有一個性能轉換因子'。 – agstudy

回答

8

是不是因素只是整數應該更容易計算排序 比字符?

是的,如果你已經有了一個因子。但創造這一因素的時間可能很重要,這就是setkey(和特設by)的目標。嘗試在隨機排序的字符向量上計時factor(),比如說1e6長度爲1e4的水平。然後比較setkey或特設by上的原始隨機排序字符向量。

agstudy的評論也是正確的;即字符向量(作爲R高速緩存字符串的指針)總是與因素非常相似。在32位系統上,字符向量與因子的整數向量大小相同,但該因子具有要存儲(有時也是複製)的levels屬性。在64位系統上,指針是兩倍大。但另一方面,R的字符串緩存可以直接從字符向量指針中查找,而該因子具有通過級別的額外躍點。 (levels屬性也是R字符串緩存指針的字符向量)

相關問題