R ve Julia'yı birbirine mi bağlıyorsunuz?


135

Julia, hızlı ve sözdizimi hesaplaması için çok umut verici görünüyor (örneğin, burada) ), ancak bir süre için genel istatistik iş akışı açısından R'nin yakınında hiçbir yerde olmayacağından şüpheleniyorum. Bu yüzden C ++ ağırlıklı olarak R programlarında kullanıldığı yerde kullanmak istiyorum: yavaş kod bölümlerini optimize etmek. Julia'yı öğrenmeye zaman ayırmadan önce, Julia kod parçalarını R koduna gömmek için hangi tesislerin olduğunu merak ediyorum.

Yani:

  • R ve Julia'yı bağlamak için hangi tesisler var?
  • Rcpp'e sıfır ölçekte ne kadar sağlam ve iyi düşünülmüşler?

Rcpp'in şu anda R içinden C ++ çağrısına izin verdiği gibi R'den Julia'yı aramak istiyorum. Julia'dan R'yi aramak istemiyorum. (Yani RCall.jl çalışmaz)


7
Benim tahminim o cezalar için çok erken geçiş ve konusu oluruz olmasıdır. Yanlış yaptığım için mutlu olurum - aynı zamanda işi benimsemekten ve orta derecede benimseyenlerin yolunu
açtığın

15
Performans ölçütlerinde kullandıkları işlevler, R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R'yi kullanmak için alışılmadık bir yol gibi görünüyor . Neredeyse bir Ferarri'ye dizel koymak gibi ...
James

2
Soru ilgili. Julia için AC ABI ortaya çıkıyor gibi görünüyor. Yakında Julia-R arayüzü yapmakta bıçaklanma şansım var.
lgautier

4
Kabaca çalışan bir Julia-R köprüsü var ( github.com/lgautier/Rif.jl ). Diğer yöne gitmek Julia ucunda devam etmekte olan çalışmaya bağlıdır.
lgautier

3
@ lgautier Umarım işinize devam etmeyi başarırsınız. Cehennem, bunu destekleyecek bir başlangıç ​​sayfası olsaydı, orada olacağından eminim.
Maxim.K

Yanıtlar:


42

RJulia R paketi oldukça iyi şimdi R. bakar R CMD check(eğer uyarılar veya hatasız çalıştığını juliadüzgün yüklenir).

Bana göre en büyük TODO, Julia'nın R'deki gerçekten temel esnek genel veri yapısını oluşturan adlandırılmış listeleri döndürmesini sağlamaktır.

Doug Bates beni RCall hakkında Julia'dan R'ye (yani R'den Julia'ya diğer yöne) çift yönlü bir arayüz hakkında uyardı . Ayrıca Doug, Julia'nın mevcut kararlı sürümleri yerine julia 0.4.0'ı hedeflemesini önerdi .


57

Ben de Doug Bates Ocak ayında bana bir teke tek gönderilen beri Julia bakarak edilmiştir . Ama @ gsk3 gibi, zengin R nesnelerini Julia'ya iletmek istediğim için bunu bir "Rcpp ölçeğinde" ölçüyorum. Ve bu şu anda hiç desteklenmiyor gibi görünüyor.

Julia'nın hoş ve basit bir C arayüzü var. Bu bize böyle bir şey kazandırıyor .C(). Ancak r-devel üzerinde yakın zamanda tartışıldığı gibi, gerçekten istemiyorsunuz .C(), çoğu durumda.Call() gerçek R nesnelerini temsil eden gerçek SEXP değişkenlerini iletmek . Şu anda bu sınırlama nedeniyle R'den Julia için çok az alan görüyorum.

Belki Rserve için tcp / ip kullanan dolaylı bir arayüz, Julia biraz olgunlaşmadan ve uygun bir C ++ arayüzü elde etmeden önce ilk başlangıç ​​olabilir. Ya da gerçek R API'nin sadece bir C katmanı sunduğu gibi, Julia'ya veri beslediğimiz bir ara katmana (birisinin yazmak zorunda kalacağı) girmeden önce R'den C ++ 'ya ulaşmak için Rcpp tabanlı bir şey kullanırız. Dunno.

Ve günün sonunda biraz sabır gerekebilir. Fritz Leisch'ın comp.os.linux.an duyuru haber grubunda ilk duyurularını yaptığı 1996 ya da 1997 civarında R'ye bakmaya başladım. Ve o zaman R'nin imkanları oldukça sınırlıydı (ama S dilinin tam vaadi, tabii ki, bir kazananımız olduğunu biliyorduk). Birkaç yıl sonra onu birincil modelleme dilim yapmaya hazırdım. O zaman CRAN'ın 100'den az paketi vardı ...

Julia oraya gidebilir. Ama şimdilik çoğumuzun R'de iş yapacağından şüpheleniyorum ve Julia'da birkaç tuhaf bakışımız var.


1
bildiğim
kadarıyla julia'nın

48

Bu cevapta açıkladığım gibi Julia geliştirme planı, Julia kodunun C ABI kullanılarak çağrılan paylaşılan kütüphanelere derlenmesine izin vermektir. Bu gerçekleştiğinde, Julia kodunu R'den C / C ++ kodunu çağırmak kadar kolay olacaktır. Ancak bunun mümkün olabilmesi için makul miktarda çalışma yapılması gerekmektedir.


4
Kulağa çok umut verici geliyor. Ben (ve diğerlerinin de) Julia'yı Matlab'ın şu anda nasıl kullanıldığının yerine, C ve ilkinin sağladığından daha fazla matematiksel sezgi gerektiren hesaplama ağır sonuçları için harika bir yedek olarak görüyorum. Bunun için, R ve Julia inanılmaz bir tamamlayıcı olabilir. Julia R'yi desteklese bile (ve açıkçası iyi olurdu), Julia'daki istatistik kütüphanesinin zengin bir yere yakın olmasından en az on yıl önce, bu arada R ve Julia arasındaki arayüz yeteneklerinin açılmasına yardımcı olabilir -kaynak istatistiksel hesaplama gelişir.
Ari B. Friedman

8
Bunu yazdığından beri bu durum değişti mi? (ps Julia'yı seviyorum , üzerinde çalıştığın için teşekkürler!)
Andy Hayden

23

Hızlı güncelleme. Bu soru sorulduğundan beri, Julia'nın içinden R programlarını çağırmasına izin veren bir Julia paketinin başlangıcı olmuştur.

Daha fazla bilgi için: https://github.com/lgautier/Rif.jl


1
Teşekkürler, ancak yukarıdaki lgautier'in yorumlarına bakın. Bu tam tersidir. Julia'yı R içinden aramak istiyorum.
Ari B. Friedman

5
+1 çünkü Julia gibi dar bir konuda her bilgi oldukça bilgilendirici
Qbik

@ AriB. Friedman'ın dediği gibi, bu yeni bir bilgi değil - ve hepimiz Julia'yı R'den çağırmak istiyoruz, tersi değil.
Martin Mächler

13

Bu projeyi gören var mı?

https://github.com/armgong/RJulia

Oldukça yeni ama tam olarak ne talep yapıyor gibi görünüyor!


4
İpucu için teşekkürler. Gerçekten de bu işe yararsa çözüm olurdu. Yüklemeyi denedim (çok güncel R 3.1.2 yamalı) ve Julia (0.4.0-dev .. 30 Aralık 2014 tarihinde ubuntu paketi olarak güncellendi). Sonra derleme başarısız oldu ve github sorunu açtım github.com/armgong/RJulia/issues/10 Umarım daha da ileri gideceğiz ... yakında
Martin Mächler

1
Herhangi bir gelişme? Github repolarından oldukça aktif geliştirme bildirimleri alıyorum, bu yüzden sorunların çözüldüğünü hayal ediyorum ...
Adam

2
Aslında! Burada takip etmedim - ancak yukarıdaki sorunlar sayfasında: Başlıca sorunların hepsi kaldırıldı. Paketi, yardım edilebilir sayfalar ekleyerek serbest bırakılabilir (CRAN'a) yakınlaştırmak için gönüllü olmuştum. Ama ne yazık ki, diğer meşgul konularda çok derinim, bu yüzden şimdilik (benim için) beklemek zorunda.
Martin Mächler

11

JuliaCallSon zamanlarda Julia'yı R'ye yerleştiren bir R paketi oluşturdum . Paket CRAN'da.

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

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

Paketin kullanımı şöyledir:

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)

Gördüğünüz gibi, komut dizeleri gönderebilir ve Julia işlevlerini gerçekten kolayca çağırabilirsiniz.

Ayrıca Julia paketlerini JuliaCallörneğin R

  • convexjlr CRAN da Convex.jl kullanarak R Disiplinli Konveks Programlama için.
  • ipoptjlr, Julia paketini kullanan bir R Point InteriorT OPTimizer (IPOPT) arayüzü Ipopt.jl.

Hakkında herhangi bir geri bildirim için hoş geldiniz JuliaCall!!


7

Orada da XRJulia paket dan XR e amaçlayan paket ailesi X eğilimi R John Chambers (R yaratıcılarının biridir). Julia ve R sonra rJulia ve benzer paketler arasında veri aktarmak için biraz farklı bir yaklaşım (JSON) kullanır.


5

Ayrıca benim denememi de kontrol etmek isteyebilirsiniz: JuliaConnectoRR-paketi. Paket GitHub ve CRAN'dan edinilebilir .

Amacı, Julia'dan R kodundaki R işlevleri gibi kullanılabilecek şekilde fonksiyonları doğrudan R'ye aktarmaktır. Julia işlevlerinin dönüş değerleri, R'de kullanılabilen ve ayrıca Julia'ya aktarılabilen R veri yapılarına çevrilir. Julia ve R'nin daha fazla entegrasyonu için, R fonksiyonlarını geri arama fonksiyonları olarak ileterek Julia'dan R'ye geri çağrı yapmak da mümkündür.

XRJulia'ya benzer şekilde, JuliaConnectoR TCP'ye dayanır, ancak işlevsel olarak yönlendirilir ve XRJulia'nın yaptığı gibi metin tabanlı JSON mesajları yerine optimize edilmiş özel akış formatı kullanır. TCP ile iletişim kurmanın bir avantajı, Julia ve R'nin farklı sürümlerine göre kararlılıktır. RCall ve JuliaCall gibi C arayüzleri düzeyinde bir entegrasyon ile bunu korumak çok daha zordur.

Paket Julia ≥ 1.0 ve çok çeşitli R sürümleriyle çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.