本文對應《r語言程式設計藝術》
第14章:效能提公升:速度和記憶體;
第15章:r與其他語言的介面;
第16章:r語言平行計算
效能提公升:速度和記憶體
要使r**執行速度更快,有以下建議:
通過向量化的方式優化、使用位元組碼編譯等;
將**中最消耗cpu的核心部分用編譯型語言編寫,如c或c++;
將**用某種並行的方式編寫。
消除顯示迴圈:
採用向量化提公升速度,因為採用顯示迴圈涉及多次函式呼叫和迭代,耗費時間,而向量化函式內部是用編譯型語言實現,因此會提公升速度。
常用的加速**的向量化函式:ifelse() /which() /where() /any() /all() /cumsum() /cumprod()等函式;用於矩陣的rowsums() /colsums()等函式;用於窮舉所有組合問題的combn() /outer() /lower.tri() /upper.tri() /expand.grid()等函式。
利用rprof()來尋找**的瓶頸:
首先呼叫rprof()來開啟監視器,然後執行**,再呼叫帶null引數的rprof()來結束監視。最後,呼叫summaryrprof()來檢視結果。
記憶體管理:
資料分塊:read.table()函式的skip引數設定,可以分塊讀取資料。
r軟體包的記憶體管理:rmysql,提供r與mysql的介面,將選擇資料的操作放在資料庫端;biglm包,可以在非常大的資料集上進行回歸和廣義線性模型的分析;ff包,通過將資料存放在硬碟上來迴避記憶體的限制;bigmemory包,功能類似,但它不僅可以將資料儲存在硬碟上,還可以將資料儲存在機器的主記憶體中,這對於多核的機器而言是乙個理想的選擇。
r與其他語言的介面
能被r呼叫的c/c++函式:
一般而言,這樣做的目的是提公升程式的效能;另乙個原因是使用特殊的i/o操作(例如r使用的tcp協議速度不如c/c++使用的udp協議)。
介面可以通過.c()或.call()實現。.call()提供了更全面的功能,但使用它需要對r的內部結構有所了解。
注意:c語言中,二維陣列是按行進行儲存的,而在r中則是按列儲存;c語言下標是從0開始,而在r中是從1開始。
從python呼叫r:
python缺少內建的統計和資料處理功能,可以通過r來彌補。
rpy是乙個python模組,允許在python中使用r。如果希望有額外的效能提公升,則可以考慮與numpy共同使用。
語法:r中的物件(函式)名冠上r.字首。
注意:python的語法中沒有波浪號,因此在指定模型表示式時需要使用字串;
需要乙個資料框來包含資料;
如果r的函式名中帶有英文句點,那麼需要在python中改為下劃線。
>>>r.library(『lattice』)>>>r.assign(『a』, a)
>>>r.assign(『b』, b)
>>> r(『g <-expand.grid(a, b)』)
>>> r(『g$var3 <- g$var1^2 + g$var1 *g$var2』)
>>> r(『wireframe(var3 ~ var1 +var2, g)』)
>>> r(『plot(wireframe(var3 ~ var1 + var2, g))』)
r語言平行計算
snow包簡介:主要過程:
載入**
載入snow包
建立snow集群
建立相關的鄰接矩陣
在建立的集群上針對鄰接矩陣執行**
openmp包:
利用r呼叫並行化的c
常用指令:
#pragma omp barrier
迭代型演算法中常用,執行緒將在屏障處進行等待,直到每次迭代的結束
#pragma omp critical
// place one or more statements here
緊接著這一指令的**塊稱為乙個「關鍵區域」(critical section),意思是在這個區域中同時只允許乙個執行緒執行這段**
#pragma omp single
// place one or more statements here
緊接著這一指令的**塊將只被乙個執行緒執行
簡單並行(embarrassingly parallel):
指那些執行緒與執行緒之間不需要進行互動的並行方式,它們往往只需要將原始的程式稍加修改即可實現並行。這樣,不僅編寫簡單,而且有著極地的通訊開銷。
靜態和動態任務分配:
總體來說,動態任務分配因為有可能產生嚴重的快取開銷,因此實際上效能不如靜態分配。
R語言程式設計藝術 11 14 15
11.字串操作 a c equator north pole south pole grep pole a 在字串a中搜尋pole nchar a 返回字串a的長度 r語言中的字串末尾沒有空字元null 對於非字元形式就要用到hadley wickham寫的stringr包 paste north ...
R語言程式設計
本文章主要自己的學習過程,部落格作為筆記 r中的包儲存在計算機上名為library的目錄下 使用函式.libpaths 可以檢視該資料夾在計算機中的具體路徑 函式library 顯示已安裝的包的列表 函式search 顯示已載入的包的列表 install.packages 包名 移除包 載入過多的包...
《R語言程式設計藝術》 2 10 測試向量相等
假設我們要測試兩個向量是否相等,使用 的樸素方法將不可行 事實上,是乙個向量化的函式。語句x y是將函式 應用到x和y的每一組元素上,得到乙個布林值的向量。那麼我們可以做什麼呢?一種選擇是結合 的向量化本質,應用函式all 對 的結果應用all 函式會詢問其所有元素是否全為真,它與詢問x與y是否完全...