注意默認nThread=getDTthreads(),即便用全部能用的核心,但並非核心用的越多越好,本人親自測試的狀況下,其實單核具備較強的性能,只有在數據大於3Gb的狀況下,開啓11核(個人機器所有核心30多核)效率才比一個核心更高,而默認使用所有的核心效率一直很是低。所以對於不是很是巨大的文件,建議設置爲1,不要使用所有核心web
因此在循環讀入文件的過程當中,就算不一樣文件的分隔符不一樣,也能夠循環一次性方便的讀入; 還有就算後續改變了文件的分隔符,文件也能夠讀入,建議不加分隔符sql
默認skip=0,會跳過不規則的行,所以有註釋行時,能夠走默認的skip參數app
as.matrix做用於data.table時會調用as.matrix.data.table,有一個rownames參數能夠指定保留爲行名的列函數
在as.data.table函數中一樣有一個rownames參數,設置爲T能夠將行名保留下來做爲data.table的一列性能
雖然set能夠在內存上直接改變數值,但在R中用for循環比批量列運算慢的多,所以首選:=或者apply等測試
好比用seq函數numeric類型的數值時,會存在不許確的問題,好比seq(0,1,by=0.2)中的0.6就不等於0.6, 雖然很費解,但這是由於計算機在存儲浮點數時出現的一些問題。如今只發現seq函數會出現這種狀況,manual中提供了一個函數解決這個問題,setNumericRounding(2) ,去除最後兩個字節,這樣運行的更快,也不會出現0.6不等於0.6的問題ip
相似於集合運算,data.table中fintersect, fsetdiff, funion,fsetequal函數能對不一樣數據框的行求交集,差集,並集等內存
應用tstrsplit函數能夠將一列按照分隔符分紅多列,函數返回的是一個列表,舉例:DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][],將x列按照/分隔,分割成c1,c2兩列get
帶有rollup, cube, groupingsets函數it
data.table 1.11.2 manual:https://cran.r-project.org/web/packages/data.table/data.table.pdf