Please enable JavaScript.
Coggle requires JavaScript to display documents.
Call R from c++ (學長/專家建議 (來源點 (Calling C and Fortran from R, Intro C…
-
老師您好
我還是聽不太懂老師意思,我們要怎麼樣從原始碼得知R在C_code裡面是怎麼運作的呢? i.e. call R from c++ ?Wush Wu wush978 May 13 11:35
R是用C寫的
就是慢慢啃C的程式碼
我建議可以先從R.h等標頭檔開始讀R的原始碼
但是如果你只要學c call R,你可以選擇透過作業系統,或是RInside 專案Wush Wu wush978 May 13 11:42
以上讀R的原始碼,是回答「我們要怎麼樣從原始碼得知R在C_code裡面是怎麼運作的呢」,後續的回答,是針對「call R from C++」
這兩個問題不同linkuron linkuron May 13 11:43
那R.h 和 Rmath.h 是同一樣件事情嗎? 不過 我確定要問的是call R from c/c++
因為目前我需要和C++ 的學長協作 , 但是學長不懂R,他需要知道R在C裡面是怎麼跑的,它的sudo code是什麼
謝謝老師Wush Wu wush978 May 13 11:44
最簡單的方式根本不用懂R的原始碼呀
你把R的檔案,例如test.R寫好,然後你學長直接在c++裡面呼叫作業系統的system call,指令就是Rscript test.R
使用RInside也不用全懂R的原始碼。你只要讀R.h, RInternals.h等這幾個標頭檔,以及學Rcpp中c++物件與R物件的對應,就可以透過RInside來處理linkuron linkuron May 13 11:46
好 謝謝 老師 我會再多理解老師提到的關鍵字Wush Wu wush978 May 13 11:46
R很複雜,他的程式碼有七萬次以上的commits,但是你不需要知道R在C裡面是怎麼跑得,也可以在其他工具裡面調用Rlinkuron linkuron May 13 11:48
好 我會再知會學長 謝謝老師Wush Wu wush978 May 13 11:48
不過從你後面的問題來看,我懷疑你可能程度還不夠啃R的原始碼linkuron linkuron May 13 11:48
恩 好orzWush Wu wush978 May 13 11:49
R.h與Rmath.h裡面都有註解都有說明,應該是R的原始碼中比較簡單的了。如果你看不懂的話,那可能吃不下R的原始碼linkuron linkuron May 13 11:51
好 沒問題Wush Wu wush978 May 13 11:52
sudo code一般是拿來描述演算法,很少有人要R這種工具的sudo code,因為太大了。R的運作,牽涉到interpreter, parsing, 以及後續的科學運算
總之,如果你想畢業的話,就不要輕易為了論文或實驗去啃R的原始碼。為了興趣的話,就歡迎私下交流... XD
RInside的話,你要學的東西也不少。RInside一定要懂Rcpp才能用,Rcpp中需要C++ template 與 物件導向相關的知識,所以若你C++不夠精,建議先去找本C++ Primer把這些背景知識補一補(我自己大概花了數個月從不會C/C++到開始能寫出Rcpp/RInside的程式)Wush Wu wush978 May 13 11:59
因此我個人最推薦你們試試看system call。無論是把C++寫成一個執行檔,然後在R裡面透過system指令呼叫,或是把R包裝成命令列應用 : https://www.youtube.com/watch?v=A1IIcZW5UrI http://ccckmit.wikidot.com/r:lcall 然後在C/C++裡面透過system call來使用,都是最簡單的(代價是每次呼叫的overhead 比較大)linkuron linkuron May 13 12:04
那我們要怎麼樣用C_code來理解R的"數學式子"是怎麼跑的?Wush Wu wush978 May 13 12:06
我想了一下,沒抓到你的問題。你是說,有一個套件,你想知道他背後的數學嘛?
還是說,例如R裡面的sin函數,你想知道他怎麼算sin(1)?linkuron linkuron May 13 12:09
對 沒錯 都需要了解 ,因為會用到Package 的function但不知道它真正的運作原理Wush Wu wush978 May 13 12:10
背後的數學,建議直接讀paper。R的package實做的統計方法應該都有paperlinkuron linkuron May 13 12:12
好 我有從這篇開始看
http://www.stat.berkeley.edu/scf/paciorek-cppWorkshop.pdfWush Wu wush978 May 13 12:12
函數的話,你去套件原始碼裡面的src資料夾,去找吧。找之前,讀一點 R call C的知識。你去Google應該可以找到滿多的,甚至是slidelinkuron linkuron May 13 12:12
恩恩 謝謝老師Wush Wu wush978 May 13 12:14
Good luck