簡體   English   中英

將R函數作為C函數傳遞給C

[英]Passing R functions to C as C functions

背景

我正在編寫一個在R中實現特定優化算法的包,用於各種預先指定的目標函數(要優化的函數)。 優化代碼本身用C語言編寫。為了使代碼盡可能高效,我還在C中重新實現了目標函數。在當前階段,R的作用是使用.Call為C代碼提供接口。 。

目標

我希望該軟件包能夠處理任何用戶提供的目標函數。 但是,我不想從C調用R函數,這會產生很大的開銷,並且很可能會非常緩慢。

我真正想要的是一種將有限類R函數(通常在統計和機器學習中看作成本函數)作為參數傳遞的方法,將此R函數轉換為C函數 ,然后將其用作目標優化算法中的函數。

解決方案

R與LISP有很強的育兒關系。 獲得函數的抽象語法樹(AST)非常簡單。 我認為有可能將AST解析為C函數然后編譯它或者只是動態傳遞它(我不知道這是否在C中是可行的)

問題

  • 上述解決方案的想法是否可行?
  • 有沒有其他方法可以做到這一點?
  • 我必須學會什么才能做到這一點?

注意:不必將此作為R包執行。 試圖在R包的剛性結構中執行此操作可能會使事情變得更加困難。

先前實驗的一些指示:

  • 萊斯的R到C編譯器 :放棄了

  • 西蒙的R到C編譯器 :也陳舊。

  • Duncan Temple Lang的R和LLVM嘗試:有兩個軟件包和一篇已發表的論文,但(似乎)沒有人使用它。 自從我閱讀了論文以來已經有一段時間了,但有一個限制是它甚至沒有嘗試覆蓋所有的文件。

您不能輕易做到這一點的原因之一是,語言在計算語言以及非標准評估方面優於標准評估,承諾,強制評估等。

最后,對於將編譯的目標函數傳遞給optmizer的狹隘情況:請參閱我的RcppDE包

對喬希提醒西蒙的嘗試是不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM