data.table包使用應該注意的一些細節

fread中nThread 參數的使用

  注意默認nThread=getDTthreads(),即便用全部能用的核心,但並非核心用的越多越好,本人親自測試的狀況下,其實單核具備較強的性能,只有在數據大於3Gb的狀況下,開啓11核(個人機器所有核心30多核)效率才比一個核心更高,而默認使用所有的核心效率一直很是低。所以對於不是很是巨大的文件,建議設置爲1,不要使用所有核心web

fread中sep是自動檢測的

  因此在循環讀入文件的過程當中,就算不一樣文件的分隔符不一樣,也能夠循環一次性方便的讀入; 還有就算後續改變了文件的分隔符,文件也能夠讀入,建議不加分隔符sql

fread能夠自動檢測註釋,而且跳過註釋行

  默認skip=0,會跳過不規則的行,所以有註釋行時,能夠走默認的skip參數app

轉換成矩陣時能夠保留某一列爲rowname

  as.matrix做用於data.table時會調用as.matrix.data.table,有一個rownames參數能夠指定保留爲行名的列函數

矩陣轉換成data.table時能夠保留列名

  在as.data.table函數中一樣有一個rownames參數,設置爲T能夠將行名保留下來做爲data.table的一列性能

不建議set和for循環一塊兒使用

  雖然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

支持相似於SQLs的分組運算

  帶有rollup, cube, groupingsets函數it

參考資料

data.table 1.11.2 manual:https://cran.r-project.org/web/packages/data.table/data.table.pdf

相關文章
相關標籤/搜索