我想編寫一個調用我的C代碼的R函數,並且不需要我在每個可能的平臺上(重新編譯爲二進制文件或SO/DLL)重新編譯C代碼。這樣的事情可能嗎?是否有可能將C源代碼編譯爲R,以便生成的R函數與平臺無關?
回答
使用直插式封裝(與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)
我認爲這隻會在最終用戶安裝了所有相關的編譯工具時才起作用,如果它們不是非技術性的,可能並不正確? –
真的,有時我忘記了Windows用戶... –
按了很好的意見,使你的代碼爲package
。更好的是,將軟件包提交給CRAN。他們將負責爲Linux,OSX和Windows分發二進制文件。
檢查出utils::package.skeleton
爲一個方便的工具來設置您的包和D/L(從CRAN)手冊R-exts.pdf
有關格式化的詳細信息。
謝謝 - 是的,看起來像最好的選擇 – jonzebedee
- 1. 是否有可能將C代碼編譯爲Javascript代碼?
- 2. 是否有可能將代碼放入R中的控制檯?
- 3. 檢查R函數是否依賴於C/C++編譯代碼的函數?
- 4. 是否可以使用Visual C++編譯預ANSI(K&R)樣式的C代碼?
- 5. 在Linux上爲不同的平臺編譯C/C++源代碼
- 6. 是否有反彙編程序生成可編譯的彙編源代碼?
- 7. 是否可以編譯c/C++混合源代碼?
- 8. QR代碼,可以用R生成?
- 9. 是否有可能以編程方式獲取生成的網頁源代碼?
- 10. 是否可以將System Verilog函數編譯爲C或C++?
- 11. 是否有可能通過VisualStudio在Windows下編譯WinCE平臺的代碼?
- 12. 將C代碼轉換爲R代碼:解析以將R中的C函數(pow(a,b)更改爲^ b)
- 13. 是否有可能以編程方式在內存中編譯java源代碼?
- 14. 如果沒有源代碼,是否可以將爲Android編譯的.so編譯爲.so for。
- 15. 用R頭文件編譯C代碼
- 16. 無法編譯r markdown代碼
- 17. 是否有可能將.NET IL代碼編譯爲機器代碼?
- 18. R - 是否可以附加到函數?
- 19. 是否可以將一串Clojure代碼編譯爲java的類?
- 20. 可能反編譯R字節碼?
- 21. 是否有可能使用python編譯c代碼?
- 22. 翻譯C#代碼至R
- 23. 編譯由HipHop生成的C++源碼
- 24. 是否有可能將匿名函數標記爲「Live Code」,以便Closure編譯器不會將其刪除?
- 25. 是否有任何其他方式來編譯使用R api的C代碼?
- 26. 是否有可能看到函數的值的源代碼
- 27. gcc是否可以不編譯代碼?
- 28. 確定數據是否與R有關
- 29. 是否可以交叉編譯MIPS的D源代碼?
- 30. 是否可以使用Turbo C/C++編譯器生成DLL?
編號根據定義,編譯語言必須在每個運行平臺上編譯。 –
根據定義不是錯誤的。對於R來說,運行時編譯C源代碼可能適用於用戶正在使用的任何平臺,這是可行的。或者,R有一個install-c-package選項,它可以接收C源代碼並自動編譯爲預定義的R函數,其編譯將取決於運行的平臺R.它當然可以做到,這只是一個問題,是否有人已經寫入了R的功能來做到這一點。 – jonzebedee
當然,你可以使用'system'在R中調用'gcc'或'make'。 –