2011-03-02 52 views
28

當我開始查看配置腳本時,我不知所措。我不知道如何去創建一個R包,它有幾個由C/C++構建的函數,它可以在Windows的Linux下運行。我試圖修改現有軟件包的膽量一直沒有成效。哪裏有用C++源代碼創建R包的好教程?

任何幫助或鏈接將不勝感激。

更新:如果可能我想對鏈接: Boost CUDA,& hwloc

,但是,我知道,升壓將是一場噩夢& hwloc不會好很多。所以我只會選擇CUDA。這就是爲什麼我在最後階段努力並嘗試修改一些現有的軟件包以適合我的需求(rgl & rglpk)。但我願意不​​依賴地從頭開始建設。謝謝大家的建議!!

+1

如果您可以告訴我們關於R安裝附帶的手冊的不足之處,這將有所幫助。 – 2011-03-02 18:18:39

+2

我讀過「Writing R Extensions」。在第1.2節我很快就迷路了。我的C++代碼有一個Makefile,但它不可移植。所以我想使用Makevars.in並配置功能,但我不知道如何繼續。有一個容易理解的例子,有兩個C++源文件,三個頭文件和全部包裝到R包中的R代碼? – 2011-03-02 18:29:40

+0

通常情況下,只有在鏈接到非R所提供的外部庫時,才需要配置腳本。如果您正在這樣做,那麼讓我們知道您嘗試使用哪個外部庫會很有幫助。 – Sharpie 2011-03-02 20:15:33

回答

22

編寫我的第一個包與編譯代碼時,我也很遺憾。這裏有一些提示,但可能有更好的材料。

關於編寫R包的主要內容是「編寫R擴展」。這是一個非常完整的指南,但也使得升技很難讀通過: http://cran.r-project.org/doc/manuals/R-exts.pdf

這裏是一個小教程,我在谷歌曾經是我使用過的第一,包括如何用C代碼中發現:http://www.stat.columbia.edu/~gelman/stuff_for_blog/AlanRPackageTutorial.pdf

上R封裝的另一種導向一般,但不與C語言代碼:http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf

Rcpp爲C++代碼的一個非常有用的包,但是我沒有用它很多尚未(事實上3天)。它在包中有很多文檔。

+0

這也有幫助:http://www.biostat.jhsph.edu/~rpeng/docs/interface.pdf – MichaelChirico 2016-03-22 17:56:02

15

我的默認方法是瞭解其他人如何解決問題。有2800多個CRAN軟件包,其中很多已經存在了十多年。問題是可以解決的,並且已經解決了。

現在,文檔也存在,但也許分散得太多了。而且,目標轉移。例如,多年前,我們仍然使用src/Makefile,這些日子非常推薦而不是,因爲需要多層構建(在OS X上,在Windows上,以及在Linux上的一天)。

所以試圖保持簡單有助於。你實際上可以擁有一個有效的C++項目......沒有任何東西。只需將源文件放在foo包的src/中,R就會知道如何構建libfoo.solibfoo.dylib或...,具體取決於平臺。如果您需要其他頭文件,請嘗試使用src/Makevars。對於外部依賴,它變得更加棘手,一個必須學習autoconf等,但許多軟件包通過一些簡單的操作。

所以請擴展您的問題,顯示失敗的內容並記錄您嘗試的內容。我相信我們可以幫助你。

編輯:而如果你想這與Rcpp包(它與R和C++集成方面的幫助),然後有一個entire vignette about to do this in your own package

編輯2:現在,擴大您的問題,CUDA是一個完全不同的野獸。當你混合使用不同的編譯器等時,這會更困難。在CRAN上有兩個示例包,研究它們。

+0

如果我願意用C函數包裝我的C++代碼,那麼我不需要使用Rcpp會嗎? – 2011-03-02 20:39:50

+0

不,但Rcpp在這裏幫助而不是阻礙。我們中的許多人認爲通過釋放你不必編寫重複包裝*會使事情變得更容易。看看一些例子,你可能會喜歡它。但是要重申:如果你的項目很簡單,你不*需要'src/Makevars',並且你不*必須使用Rcpp。但我們中的一些人認爲它有助於:) – 2011-03-02 20:58:19

+0

非常感謝您的洞察力!我會檢查出來的。 – 2011-03-03 00:57:39