1. 程式人生 > >使用R處理大資料集

使用R處理大資料集

  • 儘量向量化運算。使用R內建的函式來處理向量、矩陣和list(例如函式sapply,lapply和mapply),儘量避免使用迴圈(for和while);
  • 使用矩陣,必要時才使用資料框,因為矩陣的開銷更少;
  • 使用read.table()函式族把外部資料匯入資料框時,儘量顯式設定colClasses和nrows選項,設定comment.char = "",把不需要的列設定成NULL。這樣可以減少佔用的記憶體,同時加快處理速度。將外部資料匯入矩陣時,使用scan()函式;
  • 在處理全部資料前,用資料的子集測試程式,來優化程式,去掉bug;
  • 刪除臨時物件和不再用的物件。呼叫rm(list=ls())可以刪除記憶體中的所有物件。刪除指定的物件可以用rm(object);
  • 在Jeromy Anglim的部落格文章“R的記憶體管理:一些小竅門和技巧”(原文,被牆)中提到,使用函式.ls.objects()列出工作區內的物件佔用的記憶體大小。這個函式會幫助你找到吃記憶體的大傢伙。
  • profile你的程式,看看在每個函式中花的時間。你可以用Rprof()和summaryRprof()函式完成這項工作。system.time()函式也可以幫助你。profrprooftools 包提供了若干函式來幫助分析profile的輸出。
  • Rcpp包可以把R物件轉成C++函式(原文是The Rcpp package can be used to transfer R objects to C++ functions and back when more optimized subroutines are needed. 後半句不知怎麼翻譯)