2013-12-11 37 views
1

我想編寫一個調用我的C代碼的R函數,並且不需要我在每個可能的平臺上(重新編譯爲二進制文件或SO/DLL)重新編譯C代碼。這樣的事情可能嗎?是否有可能將C源代碼編譯爲R,以便生成的R函數與平臺無關?

+0

編號根據定義,編譯語言必須在每個運行平臺上編譯。 –

+1

根據定義不是錯誤的。對於R來說,運行時編譯C源代碼可能適用於用戶正在使用的任何平臺,這是可行的。或者,R有一個install-c-package選項,它可以接收C源代碼並自動編譯爲預定義的R函數,其編譯將取決於運行的平臺R.它當然可以做到,這只是一個問題,是否有人已經寫入了R的功能來做到這一點。 – jonzebedee

+0

當然,你可以使用'system'在R中調用'gcc'或'make'。 –

回答

1

使用直插式封裝(與RCPP):

# with Rcpp plugin 
if(require(Rcpp)) { 
    fx <- cxxfunction(signature(x = "integer", y = "numeric") , ’ 
    return wrap(as<int>(x) * as<double>(y)) ; 
    ’, plugin = "Rcpp") 
fx(2L, 5) 
+0

我認爲這隻會在最終用戶安裝了所有相關的編譯工具時才起作用,如果它們不是非技術性的,可能並不正確? –

+0

真的,有時我忘記了Windows用戶... –

2

按了很好的意見,使你的代碼爲package。更好的是,將軟件包提交給CRAN。他們將負責爲Linux,OSX和Windows分發二進制文件。

檢查出utils::package.skeleton爲一個方便的工具來設置您的包和D/L(從CRAN)手冊R-exts.pdf有關格式化的詳細信息。

+0

謝謝 - 是的,看起來像最好的選擇 – jonzebedee

相關問題