web-dev-qa-db-ja.com

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

ジュリアは、高速で構文が正しい計算(たとえば here )に対して非常に有望に見えますが、しばらくの間、全体的な統計ワークフローの観点からRに近いところはまだないと思われます。だから私はC++が主にRプログラムで使用される場所でそれを使用したい:コードの遅い部分を最適化するために。しかし、Juliaの学習に時間を費やす前に、RコードにJuliaスニペットを埋め込むための機能がどんなものか興味があります。

そう:

  • Rとジュリアをリンクするための機能はありますか?
  • ゼロからRcppのスケールで、どれだけ堅牢で十分に考え抜かれていますか?

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

123
Ari B. Friedman

RJulia RパッケージはRから非常に良く見えます。R CMD checkは警告やエラーなしで実行されます(Juliaが適切にインストールされている場合)。

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

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

36
Martin Mächler

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

Juliaには、すてきでシンプルなCインターフェイスがあります。そのため、.C()のようなものが得られます。しかし、最近r-develで議論したように、あなたは本当に.C()を望んでいません。ほとんどの場合、実際のRオブジェクトを表す実際のSEXP変数を渡すために.Call()を望みます。そのため、現時点では、この制限のため、Rからのジュリアのスコープはほとんどありません。

ジュリアが少し成熟し、適切なC++インターフェイスが得られる前に、tcp/ipを使用してRserveに間接インターフェイスを開始することができます。または、Rcppに基づいたものを使用して、RからC++に移動してから、中間層(誰かが作成する必要があります)に入り、そこからJuliaにデータフィードします。ダンノ.

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

ジュリアはそこに着くかもしれません。しかし今のところ、私たちの多くがRで作業を完了し、Juliaにほんの少し興味をそそるだけだと思う​​。

54

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

46
StefanKarpinski

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

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

21
aviks

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

https://github.com/armgong/RJulia

かなり新しいですが、要求されたとおりのことをしているようです!

12
Adam

最近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)

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

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

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

JuliaCall !!へのフィードバックを歓迎します!

8
Consistency

[XRJulia package from [〜#〜] xr [〜#〜] e[〜# 〜] x [〜#〜]tend[〜#〜] r [〜#〜]by John Chambers (Rの作成者の1人)。少し異なるアプローチ(JSON)を使用して、JuliaとRの間でデータを転送し、次にrJuliaと同様のパッケージを転送します。

6
vh-d

また、私の試みをチェックアウトしたいかもしれません: JuliaConnector R-package。

RのJ関数から関数をインポートし、RコードのR関数のように使用できるようにすることが目標です。 Julia関数の戻り値はRデータ構造に変換され、Rで使用でき、Juliaに戻すこともできます。これは、基本的なデータ構造に対してすでに安定した方法で機能しています。パッケージはまだバージョン0.1だけですが、私はそれをさらに積極的に開発しており、2019年末までに生産準備の整った製品を用意する予定です。JuliaとRをさらに統合するために、JuliaからコールバックすることもできますR関数をコールバック関数として渡すことにより、Rに渡します。

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

このパッケージは、Julia≥0.7およびさまざまなRバージョンで動作します。

2
esel