Julia terlihat sangat menjanjikan untuk komputasi cepat dan sintaks-waras (misalnya di sini ), tapi saya menduga itu tidak akan mendekati R dalam hal alur kerja statistik keseluruhan untuk beberapa waktu. Jadi saya ingin menggunakannya di mana C ++ terutama digunakan dalam program R: untuk mengoptimalkan bagian kode yang lambat. Sebelum saya menginvestasikan waktu untuk mempelajari Julia, saya ingin tahu fasilitas apa yang tersedia untuk menyematkan potongan Julia dalam kode R.
Begitu:
- Fasilitas apa yang tersedia untuk menghubungkan R dan Julia?
- Seberapa kuat dan matang mereka, pada skala nol hingga Rcpp?
Saya ingin menelepon Julia dari R, sama seperti Rcpp mengizinkan panggilan C ++ dari dalam R sekarang. Saya tidak ingin menelepon R dari Julia. (Jadi RCall.jl tidak akan berfungsi)
Jawaban:
Paket RJulia R terlihat cukup bagus sekarang dari R.
R CMD check
berjalan tanpa peringatan atau kesalahan (jikajulia
diinstal dengan benar).TODO terbesar dalam pandangan saya adalah membuat Julia mengembalikan daftar bernama yang merupakan struktur data umum fleksibel yang sangat mendasar di R.
Perhatikan bahwa Doug Bates memberi tahu saya tentang RCall, antarmuka dua arah dari Julia ke R (yaitu, arah selain R ke Julia). Selain itu, Doug merekomendasikan untuk menargetkan julia 0.4.0 daripada julia versi stabil saat ini.
sumber
Saya juga telah melihat Julia sejak Doug Bates mengirimi saya pemberitahuan pada bulan Januari . Tapi seperti @ gsk3, saya mengukur ini pada "skala Rcpp" karena saya ingin meneruskan objek R yang kaya ke Julia. Dan itu sepertinya tidak didukung sama sekali saat ini.
Julia memiliki antarmuka C yang bagus dan sederhana. Jadi itu membuat kita menyukai
.C()
. Tetapi seperti yang baru-baru ini dibahas di r-devel, Anda benar-benar tidak ingin.C()
, dalam banyak kasus Anda lebih suka.Call()
untuk meneruskan variabel SEXP aktual yang mewakili objek R nyata. Jadi sekarang saya melihat sedikit ruang untuk Julia dari R karena keterbatasan ini.Mungkin antarmuka tidak langsung yang menggunakan tcp / ip to Rserve bisa menjadi permulaan pertama sebelum Julia sedikit matang dan kami mendapatkan antarmuka C ++ yang tepat. Atau kita menggunakan sesuatu berdasarkan Rcpp untuk berpindah dari R ke C ++ sebelum kita memasuki lapisan perantara [yang harus ditulis oleh seseorang] dari mana kita memberi umpan data ke Julia, seperti R API sebenarnya hanya menawarkan lapisan C. Entahlah.
Dan pada akhirnya, beberapa kesabaran mungkin dibutuhkan. Saya mulai melihat R sekitar tahun 1996 atau 1997 ketika Fritz Leisch membuat pengumuman pertama di newsgroup comp.os.linux.announce. Dan R memiliki fasilitas yang agak terbatas saat itu (tetapi janji penuh dari bahasa S, tentu saja, jika kami tahu kami memiliki pemenang). Dan beberapa tahun kemudian saya siap menjadikannya sebagai bahasa pemodelan utama saya. Saat itu CRAN masih memiliki kurang dari 100 paket ...
Julia mungkin akan sampai di sana. Tetapi untuk saat ini saya curiga banyak dari kita akan menyelesaikan pekerjaan di R, dan hanya melihat sekilas Julia yang aneh.
sumber
Rencana pengembangan Julia, seperti yang saya jelaskan dalam jawaban ini adalah untuk memungkinkan kompilasi kode Julia ke pustaka bersama, dapat dipanggil menggunakan C ABI. Setelah ini terjadi, akan mudah untuk memanggil kode Julia dari R seperti memanggil kode C / C ++. Namun, ada cukup banyak pekerjaan yang diperlukan sebelum ini menjadi mungkin.
sumber
Pembaruan cepat. Sejak pertanyaan ini diajukan, telah ada permulaan dari paket Julia yang memungkinkan seseorang untuk memanggil program R dari dalam Julia.
Selengkapnya di sini: https://github.com/lgautier/Rif.jl
sumber
Saya membuat paket R bernama
JuliaCall
baru - baru ini, yang menyematkan Julia di R. Paket tersebut ada di CRAN.https://cran.r-project.org/web/packages/JuliaCall/index.html
https://github.com/Non-Contradiction/JuliaCall
Penggunaan paketnya seperti ini:
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)
Seperti yang Anda lihat, Anda dapat mengirim string perintah dan memanggil fungsi Julia dengan sangat mudah.
Dan ada juga beberapa paket R yang membungkus paket Julia menggunakan
JuliaCall
, misalnya,convexjlr
untuk Pemrograman Cembung Disiplin dalam R menggunakan Convex.jl, yang juga ada di CRAN.ipoptjlr
, R Interface for Interior Point OPTimizer (IPOPT) menggunakan paket JuliaIpopt.jl
.Selamat datang untuk umpan balik apa pun tentang
JuliaCall
!!sumber
JuliaCall
? Saya menjalankan kode di R dan di salah satu bagian pipa saya menghitung Model Campuran di Julia (menggunakanJuliaCall
). Jadi, saya ingin membunuh proses julia setelah menyelesaikan eksekusi model campuran. Apa itu mungkin? Saya mencobajulia_command("exit()")
, tetapi itu juga mematikan sesi R :(Apakah ada yang melihat proyek ini?
https://github.com/armgong/RJulia
Cukup baru tetapi tampaknya melakukan apa yang diminta!
sumber
Ada juga paket XRJulia dari keluarga XR paket yang ditujukan untuk e X tend R oleh John Chambers (salah satu pencipta R). Ini menggunakan pendekatan yang sedikit berbeda (JSON) untuk mentransfer data antara Julia dan R lalu rJulia dan paket serupa.
sumber
Anda juga mungkin ingin memeriksa percobaan saya:
JuliaConnectoR
Paket-R. Paket ini tersedia dari GitHub dan CRAN .Tujuannya adalah untuk mengimpor fungsi dari Julia secara langsung di R sehingga dapat digunakan seperti fungsi R dalam kode R. Nilai yang dikembalikan dari fungsi Julia diterjemahkan ke struktur data R, yang dapat digunakan di R dan juga diteruskan kembali ke Julia. Untuk integrasi lebih lanjut dari Julia dan R, dimungkinkan juga untuk memanggil kembali dari Julia ke R dengan meneruskan fungsi R sebagai fungsi panggilan balik.
Mirip dengan XRJulia, JuliaConnectoR bergantung pada TCP, tetapi berorientasi fungsional dan menggunakan format streaming khusus yang dioptimalkan daripada pesan JSON berbasis teks seperti yang dilakukan XRJulia. Satu keuntungan dari komunikasi dengan TCP adalah stabilitas yang berkaitan dengan versi Julia dan R. Yang berbeda jauh lebih sulit untuk dipertahankan dengan integrasi pada tingkat antarmuka C seperti yang dilakukan RCall dan JuliaCall.
Paket ini berfungsi dengan Julia ≥ 1.0 dan berbagai versi R.
sumber