Rとジュリアをリンクしますか?


135

Juliaは高速で構文的に正しい計算(たとえばここ)に非常に有望に見えますが、全体的な統計ワークフローの観点からは、まだしばらくRの近くにはないでしょう。したがって、Cプログラムが主にRプログラムで使用されている場所で使用したいと思います。コードの遅い部分を最適化するためです。ただし、Juliaの学習に時間をかける前に、RコードにJuliaスニペットを埋め込むための機能について知りたいと思います。

そう:

  • RとJuliaをリンクするための施設はありますか?
  • ゼロからRcppのスケールで、それらはどれほど堅牢でよく考えられていますか?

RcppでR内からC ++を呼び出すことができるように、RからJuliaを呼び出したいのですが。ジュリアからRに電話したくない。(したがって、RCall.jlは機能しません)


7
私の推測では、あなたは非常に初期の採用者であり、それらのペナルティの対象となるでしょう。私は間違っていて嬉しいです-私もあなたに仕事をしてもらい、私たちの中型アダプターのための道を開いて
もらいたい

15
パフォーマンスベンチマークで使用する関数は、Rを使用するかなり変わった方法のようです:github.com/JuliaLang/julia/blob/master/test/perf/perf.R。それはまるでディーゼルをフェラーリに入れるようなものです...
ジェームズ

2
質問は適切です。JuliaのAC ABIが出現しているようです。JuliaからRへのインターフェースを間もなく作成する可能性があります。
lgautier

4
JuliaからRへのブリッジが大まかに機能しています(github.com/lgautier/Rif.jl)。反対の方向に進むかどうかは、ジュリア側でまだ進行中の作業に依存します。
lgautier

3
@lgautierどうぞよろしくお願いいたします。地獄、これをサポートするためのキックスターターページがあったら、きっとそこにいるでしょう。
Maxim.K 2014

回答:


42

RJulia RパッケージはRから今はかなりよさそうだ R CMD check(あれば警告やエラーなしで実行julia正しくインストールされています)。

私の見解では、最大のTODOは、JuliaがRの本当に基本的な柔軟な一般的なデータ構造を構成する名前付きリストを返すようにすることです。

Doug Batesは、RCallからJuliaからRへの双方向インターフェース(つまり、RからJuliaへの反対方向)について警告を発したことに注意してください 。また、Doug は、現在の安定バージョンのjuliaではなく、julia 0.4.0をターゲットにすることを推奨しました。


57

Doug Batesが1月にヘッズアップを送ってきて以来、私もJuliaを見ていました。しかし、@ gsk3のように、リッチRオブジェクトをJuliaに渡したいので、これを「Rcppスケール」で測定します。そして、それは今のところまったくサポートされていないようです。

Juliaには、素晴らしくシンプルなCインターフェイスがあります。だから、私たちのようなものになり.C()ます。しかし、最近r-develで説明したように、実際のRオブジェクトを表す実際のSEXP変数を渡すために.C()、たいていの場合は必要ありません.Call()。そのため、現在、この制限のため、RからのJuliaのスコープはほとんどありません。

Juliaが少し成熟して適切なC ++インターフェースを取得する前に、Rserveへのtcp / ipを使用する間接インターフェースが最初の出発点になるかもしれません。または、Rcppに基づくものを使用して、RからC ++に取得する前に、実際のR APIがCレイヤーのみを提供するように、そこからJuliaへのデータフィードから中間レイヤーに入る前に中間レイヤーに入る必要があります。ダンノ。

そして一日の終わりには、いくらかの忍耐が必要かもしれません。Fritz Leischがcomp.os.linux.announceニュースグループで最初の発表をしたとき、私は1996年か1997年頃にRを調べ始めました。そして、Rは当時はかなり限られた機能しか持っていませんでした(もちろん、S言語の完全な約束はもちろん、勝者がいることはわかっていました)。そして数年後、それを私の主要なモデリング言語にする準備が整いました。当時、CRANにはまだ100パッケージ未満しかありませんでした...

ジュリアはそこにたどり着くでしょう。しかし、今のところ、私たちの多くはRで仕事を終えて、ジュリアで好奇心をほんの少しだけ見ていると思います。


1
私の知る限りでは、
Julia

48

Julia開発計画は、この回答で説明したように、C ABIを使用して呼び出し可能な共有ライブラリへのJuliaコードのコンパイルを許可することです。これが発生すると、C / C ++コードを呼び出すのと同じくらい簡単に、RからJuliaコードを呼び出すことができます。ただし、これが可能になるまでにはかなりの作業が必要です。


4
これは非常に有望に聞こえます。私(そして私は他の人も思う)は、Mutlabが現在使用されている方法の優れた代替としてJuliaを見る-Cとそのilkが提供するよりも数学的な直観を必要とする計算を多用する結果のために。そのため、Rとジュリアは驚くべき補完物になる可能性があります。ジュリアがRに取って代わったとしても(そして、率直に言って私はそれで大丈夫です)、ジュリアの統計ライブラリが豊富に近くなるまで少なくとも10年はかかるでしょう。その間、Rとジュリアの間のインターフェース機能はソースの統計計算が成功します。
アリB.フリードマン

8
これを書いてからこの状況は変わりましたか?(私はジュリアを愛しています、あなたの取り組みに感謝します!)
Andy Hayden 14年

23

クイックアップデート。この質問が出されて以来、Julia内からRプログラムを呼び出すことができるJuliaパッケージの始まりがありました。

詳細:https : //github.com/lgautier/Rif.jl


1
ありがとうございます。ただし、上記のlgautier自身のコメントをご覧ください。これは逆の方向です。R内からジュリアに電話をかけたい
アリB.フリードマン

5
+1ジュリアのような狭いトピックでは、すべての情報がかなり有益です
Qbik 2013

@ AriB.Friedmanが言ったように、これは新しい情報ではありません-そして私たちは皆、JをRから呼び出したいのですが、その逆ではありません。
MartinMächler、2015年

13

このプロジェクトを見た人はいますか?

https://github.com/armgong/RJulia

かなり新しいですが、要求されていることを正確に実行しているようです!


4
ヒントをありがとう。実際、これが機能した場合の解決策になります。インストール(最新のR 3.1.2パッチを適用)とジュリア(0.4.0-dev .. 2014年12月30日にubuntuパッケージとして更新)をインストールしてみました。その後、コンパイルが失敗したと私はgithubの問題開かれ github.com/armgong/RJulia/issues/10 我々はすぐに...さらに取得してみましょう希望
マーティンMächler

1
何か進歩はありますか?私は彼らのgithubリポジトリからかなりアクティブな開発通知を受け取っているので、問題が解決されていると思います...
Adam

2
確かに!ここではフォローアップしませんでした-上の問題のページ:主要な問題はすべて削除されました。私は、パッケージを(CRANに)リリース可能に近づけるように、つまり、有用なヘルプページを追加することを志願しました。しかし、残念ながら、私は他の忙しい問題に深すぎるので、これは(私にとって)しばらく待つ必要があります。
MartinMächler、2015年

11

JuliaCallJuliaをRに埋め込んだ最近の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)

ご覧のとおり、コマンド文字列を送信してJulia関数を簡単に呼び出すことができます。

またJuliaCall、を使用してJuliaパッケージをラップするRパッケージもあります。たとえば、

  • convexjlr CRANにあるConvex.jlを使用したRでの統制のとれたConvexプログラミング用。
  • ipoptjlr、Juliaパッケージを使用したInterior Point OPTimizer(IPOPT)のRインターフェイスIpopt.jl

に関するフィードバックを歓迎しますJuliaCall!!


7

John Chambers(Rの作成者の1人)によるX傾向のRを目的としたXRファミリーパッケージXRJuliaパッケージもあります。JuliaとRの間、rJuliaと同様のパッケージの間でデータを転送するために少し異なるアプローチ(JSON)を使用します。


5

また、私の試みをチェックすることもできます:JuliaConnectoRRパッケージ。パッケージはGitHubおよびCRANから入手できます。

ジュリアからRに直接関数をインポートして、RコードのR関数のように使用できるようにすることが目標です。Julia関数の戻り値はRデータ構造に変換され、Rで使用したり、Juliaに返したりすることができます。JuliaとRをさらに統合するために、R関数をコールバック関数として渡すことにより、JuliaからRにコールバックすることもできます。

XRJuliaと同様に、JuliaConnectoRはTCPに依存していますが、機能的に指向されており、XRJuliaのようにテキストベースのJSONメッセージではなく、最適化されたカスタムストリーミング形式を使用します。TCPによる通信の利点の1つは、JuliaとRの異なるバージョンに対する安定性です。これは、RCallやJuliaCallのようなCインターフェースのレベルでの統合では、維持がはるかに困難です。

このパッケージは、Julia≥1.0および幅広いRバージョンで動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.