ジュリアは、高速で構文が正しい計算(たとえば here )に対して非常に有望に見えますが、しばらくの間、全体的な統計ワークフローの観点からRに近いところはまだないと思われます。だから私はC++が主にRプログラムで使用される場所でそれを使用したい:コードの遅い部分を最適化するために。しかし、Juliaの学習に時間を費やす前に、RコードにJuliaスニペットを埋め込むための機能がどんなものか興味があります。
そう:
Rcppが現在R内からC++を呼び出すことができるように、RからJuliaを呼び出したいです。 Rをジュリアから呼び出したくありません。 (RCall.jlは機能しません)
私も ダグ・ベイツが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にほんの少し興味をそそるだけだと思う。
この答え で説明したJulia開発計画は、C ABIを使用して呼び出し可能な共有ライブラリへのJuliaコードのコンパイルを許可することです。これが発生すると、C/C++コードを呼び出すのと同じくらい簡単にRからJuliaコードを呼び出すことができます。ただし、これが可能になるにはかなりの量の作業が必要です。
クイックアップデート。この質問が尋ねられて以来、Julia内からRプログラムを呼び出すことができるJuliaパッケージの始まりがありました。
最近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
!!へのフィードバックを歓迎します!
[XRJulia package from [〜#〜] xr [〜#〜] e[〜# 〜] x [〜#〜]tend[〜#〜] r [〜#〜]by John Chambers (Rの作成者の1人)。少し異なるアプローチ(JSON)を使用して、JuliaとRの間でデータを転送し、次にrJuliaと同様のパッケージを転送します。
また、私の試みをチェックアウトしたいかもしれません: 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バージョンで動作します。