最近因為項目要用到,所以在想辦法把R語言用到C++中. 網上查了看到有一個Rcpp的工具.所以在這里總結一下.
現在能想到的幾種在C++中調用R語言的方法如下:
1. 使用Rcpp
- Exposing C++ functions and classes with Rcpp modules
- Rcpp: Seamless R and C++ Integration
- Rcpp
- Writing R Extensions
- RInside:
- 居然在這里看到了Qt!!!好激動!!:
R inside Qt: A simple RInside application
- C++與R交互
- 居然在這里看到了Qt!!!好激動!!:
2. 在C++中直接執行R腳本函數
- 用system()
-
1. 管道
2. fork/spawn + exec
3. CreateProcess
4 system - 直接調用R語言解釋器
Rscript *.R
3. 使用文件交換----即C++輸出參數等到一個文檔,然后R腳本調用計算后再輸出到文檔,讓C++程序讀取
這里面大概存在着時間控制,循環讀取,還有R腳本何時執行的問題....
以及最后項目是要做一個軟件出來, 那么使用文檔存儲和R調用沒有問題嗎?
-
不要做A語言代碼修改為B語言代碼的無用功。
也不要做用A語言代碼直接調用B語言代碼庫這樣復雜、這樣容易出錯的傻事。
只需讓A、B語言代碼的輸入輸出重定向到文本文件,或修改A、B語言代碼讓其通過文本文件輸入輸出。
即可很方便地讓A、B兩種語言之間協調工作。
比如:
A將請求數據寫到文件a.txt,寫完后改名為aa.txt
B發現aa.txt存在時,讀取其內容,調用相應功能,將結果寫到文件b.txt,寫完后刪除aa.txt,改名為bb.txt
A發現bb.txt存在時,讀取其內容,讀完后刪除bb.txt
以上A可以替換為任何一種開發語言或開發環境,B可以替換為任何一種與A不同的開發語言或開發環境。
除非A或B不支持判斷文件是否存在、文件讀寫和文件更名。
但是誰又能舉出不支持判斷文件是否存在、文件讀寫和文件更名的開發語言或開發環境呢? - 【C/C++】Linux下使用system()函數一定要謹慎
4. R腳本編譯成動態/靜態鏈接,然后嵌入c++中