2012-04-01 84 views
108

Julia對於快速和語法理解計算(例如here)看起來很有希望,但我懷疑它在整個統計工作流程方面在一段時間內不會在R附近。所以我想在C程序主要用於R程序的地方使用它:優化代碼的慢速部分。然而,在我投入時間學習Julia之前,我很好奇在R代碼中嵌入了Julia片段的設備。連接R和Julia?

所以:

  • 是那裏的連接R和Julia哪些設施?
  • 它們的穩健性和深思熟慮的程度如何,從零到Rcpp?

我想從R調用Julia,就像Rcpp允許從R內調用C++一樣。我不想從朱莉婭打電話給R。 (所以RCall.jl不會工作)

+6

我的猜測*是你會是一個非常早期的採用者並受到這些處罰。我很樂意錯誤 - 我也很樂意讓你做這項工作,併爲我們的媒體採用者鋪平道路...... – 2012-04-01 16:07:55

+2

爲什麼不使用NumPy? – Marcin 2012-04-01 16:16:05

+14

他們在性能基準測試中使用的函數看起來像是一個非常不尋常的使用R的方法:https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R。這幾乎就像將柴油放入Ferarri ... – James 2012-04-01 18:59:30

回答

25

RJulia [https://github.com/armgong/RJulia] R包看起來相當不錯,現在從R R CMD check運行時沒有警告或錯誤(如果julia已正確安裝)。

最大TODO在我看來是讓朱莉婭返回名爲列出了構成R.真正基本靈活的通用數據結構

需要注意的是道格·貝茨提醒我約RCall [https://github.com/JuliaStats/RCall.jl]雙向接口朱莉婭到R(即,比R到朱莉婭的另一個方向)。此外,道格建議瞄準茱莉亞0.4.0而不是目前的茱莉亞穩定版本。

50

我也是have been looking at Julia ever since Doug Bates sent me a heads-up in January。但是就像@ gsk3一樣,我在「Rcpp scale」上測量它,因爲我想將豐富的R對象傳遞給Julia。現在看來,這似乎不被支持。

Julia有一個不錯的簡單的C接口。因此,我們得到了像.C()這樣的東西。但正如最近在r-devel上討論的那樣,你真的不想要.C(),在大多數情況下,你寧願要.Call()以便傳遞表示真實R對象的實際SEXP變量。所以現在我看不到R的Julia的範圍,因爲這個限制。

也許一個使用tcp/ip到Rserve的間接接口可能是Julia成熟一點之前的第一個開始,並且我們得到一個合適的C++接口。或者,在我們進入一箇中間層[有人必須寫]中,我們使用基於Rcpp的東西從R到C++,從而將數據輸入到Julia,就像實際的R API只提供C層一樣。不知道。

而一天結束時,可能需要一些耐心。當Fritz Leisch在comp.os.linux.announce新聞組上發佈第一個公告時,我開始在1996年或1997年左右看R。而R當時的設施相當有限(但是S語言的全部承諾,當然,我們知道我們有一個贏家)。幾年後,我準備將它作爲我的主要建模語言。那時候CRAN還有不到100個包...

朱莉婭可能會到那裏。但是現在我懷疑我們中的很多人會在R裏完成工作,並且對Julia有一些好奇的瞥見。

+1

,因爲據我所知,是朱莉婭沒有計劃要有一個靜態編譯器允許嵌入到C++中,我們可能需要等待一段時間 – pyCthon 2013-08-28 02:30:16

41

Julia開發計劃,如我在this answer中所述,允許將Julia代碼編譯爲共享庫,可使用C ABI進行調用。一旦發生這種情況,從R調用Julia代碼就像調用C/C++代碼一樣容易。然而,在這成爲可能之前,需要做大量的工作。

+3

這聽起來很有希望。我(我認爲其他人)認爲Julia是目前使用Matlab的一個很好的替代品 - 對於計算量大的結果,仍然需要比C及其所提供的更多的數學直覺。對此,R和Julia可能是一個驚人的補充。即使朱莉婭取代了R(坦率地說我也會很好),但至少在Julia的統計數據庫接近豐富之前至少還需要十年時間,所以同時R和Julia之間的接口能力可以幫助開放源統計計算蓬勃發展。 – 2012-05-23 02:11:40

+6

自你寫這個以後,情況有沒有變化? (p.s.我*愛*茱莉亞,感謝您的工作!) – 2014-01-31 02:46:50

19

快速更新。自從問了這個問題以來,Julia包的開始就有了,它允許從Julia內部調用R程序。

這裏更多:https://github.com/lgautier/Rif.jl

+1

謝謝,但看到上面的lgautier自己的意見。這是相反的方向。我想從R. – 2013-02-02 18:14:37

+4

+1內撥打Julia,因爲在Julia這樣狹窄的話題中,每一個信息都是相當豐富的 – Qbik 2013-04-12 20:15:21

+0

As @ AriB.Friedman說,這沒有新的信息 - 我們都想從R打電話給Julia,而不是其他方式。 – 2015-01-02 19:34:35

10

有沒有人見過這個項目?

https://github.com/armgong/RJulia

相當新的,但似乎做的是要求什麼!

+4

感謝您的提示。事實上,如果它有效,這將是解決方案。我嘗試安裝(使用非常當前的R 3.1.2修補)和茱莉亞(0.4.0-dev ..更新於2014年12月30日作爲Ubuntu的包)。然後編譯失敗,我打開github問題https://github.com/armgong/RJulia/issues/10讓我們希望我們得到進一步......儘快 – 2015-01-02 20:15:06

+1

任何進展?我從他們的github回購中獲得非常活躍的開發通知,所以我會想象這些問題正在被解決...... – Adam 2015-01-21 21:12:08

+2

確實!沒有在這裏跟進 - 但在上面的問題頁面上:主要問題都被刪除了。我曾經自願讓這個軟件包更接近可釋放的版本(對CRAN),即通過添加有用的幫助頁面。但不幸的是,我在其他忙碌的事情上太深了,所以現在我必須等待(對我來說)。 – 2015-01-23 09:15:43

4

也有XRJulia packageXR家庭套餐瞄準電子商務X由約翰·錢伯斯(R的創造者之一)往往[R。它使用一種不同的方法(JSON)在Julia和R之間,然後在rJulia和類似的包之間傳輸數據。

4

我最近創建了一個名爲JuliaCall的R包,它將Julia嵌入到R中。該包位於CRAN上。

https://cran.r-project.org/web/packages/JuliaCall/index.html

https://github.com/Non-Contradiction/JuliaCall

包的用法是這樣的:

library(JuliaCall) 
julia <- julia_setup() 
julia_command("a = sqrt(2)"); julia_eval("a") 
julia_eval("sqrt(2)") 
julia_call("sqrt", 2) 
julia_eval("sqrt")(2) 

正如你所看到的,你可以發送命令字符串,真正方便地調用朱莉婭功能。

而且也有一些R封裝用JuliaCall包裹朱莉婭套餐爲例,

  • convexjlr使用Convex.jl,這也是對CRAN中的R紀律凸規劃。
  • ipoptjlr,內部點OPTimizer的R接口(IPOPT)使用Julia包Ipopt.jl

歡迎有關JuliaCall的任何反饋!