Collegando R e Julia?


135

Julia sembra molto promettente per un calcolo veloce e basato sulla sintassi (ad esempio qui ), ma sospetto che da qualche tempo non sarà da nessuna parte vicino a R in termini di flusso di lavoro delle statistiche generali. Quindi mi piacerebbe usarlo dove C ++ è principalmente usato nei programmi R: per ottimizzare parti lente del codice. Prima di investire tempo nell'apprendimento di Julia, tuttavia, sono curioso di sapere quali sono le strutture per incorporare i frammenti di Julia nel codice R.

Così:

  • Quali servizi ci sono per collegare R e Julia?
  • Quanto sono robusti e ben congegnati, su una scala da zero a Rcpp?

Voglio chiamare Julia da R, proprio come Rcpp permette di chiamare C ++ da R in questo momento. Non voglio chiamare R da Julia. (Quindi RCall.jl non funzionerebbe)


7
La mia ipotesi è che saresti un adottante molto presto e soggetto a tali sanzioni. Sarei felice di sbagliarmi - Sarei anche felice di avere il tuo lavoro e spianare la strada a noi medio-adottanti ...
Ben Bolker

15
Le funzioni che usano nei benchmark delle prestazioni sembrano un modo abbastanza insolito di usare R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . È quasi come mettere il diesel in un Ferarri ...
James

2
La domanda è pertinente. AC ABI per Julia sembra emergere. C'è una possibilità che presto avrò una pugnalata nel creare un'interfaccia Julia-to-R.
Lgautier,

4
Ho un ponte Julia-to-R funzionante all'incirca ( github.com/lgautier/Rif.jl ). Fare il contrario dipende dal lavoro ancora in corso alla fine di Julia.
lgautier,

3
@lgautier Spero sinceramente che riuscirai a riprendere il tuo lavoro. Diavolo, se ci fosse una pagina di kickstarter a supporto di questo, sarei sicuramente lì.
Massimo

Risposte:


42

Il pacchetto RJulia R sembra abbastanza buono ora da R. R CMD checkfunziona senza avvisi o errori (se juliainstallato correttamente).

Il più grande TODO dal mio punto di vista è convincere Julia a restituire elenchi nominati che costituiscono la struttura di dati generale flessibile davvero basilare in R.

Si noti che Doug Bates mi ha avvisato di RCall un'interfaccia bidirezionale da Julia a R (ovvero, l'altra direzione rispetto a R a Julia). Inoltre, Doug ha raccomandato di scegliere come target julia 0.4.0 anziché le attuali versioni stabili di julia.


57

Anch'io guardo Julia da quando Doug Bates mi ha mandato in heads-up a gennaio . Ma come @ gsk3, lo misuro su una "scala Rcpp" in quanto vorrei passare oggetti R ricchi a Julia. E questo non sembra essere affatto supportato in questo momento.

Julia ha un'interfaccia C bella e semplice. Quindi questo ci procura qualcosa di simile .C(). Ma come recentemente discusso su r-devel, in realtà non lo si desidera .C(), nella maggior parte dei casi si desidera piuttosto .Call()per passare le effettive variabili SEXP che rappresentano oggetti R reali. Quindi in questo momento vedo poco spazio per Julia da R a causa di questa limitazione.

Forse un'interfaccia indiretta che usa tcp / ip su Rserve potrebbe essere un primo avvio prima che Julia maturi un po 'e otteniamo una corretta interfaccia C ++. Oppure usiamo qualcosa basato su Rcpp per andare da R a C ++ prima di entrare in un livello intermedio [che qualcuno dovrebbe scrivere] dal quale forniamo dati a Julia, proprio come l'API R reale offre solo un livello C. Boh.

E alla fine della giornata, potrebbe essere necessaria una certa pazienza. Ho iniziato a guardare R intorno al 1996 o 1997 quando Fritz Leisch fece i primi annunci sul newsgroup comp.os.linux.announce. E allora R aveva strutture piuttosto limitate (ma la piena promessa della lingua S, ovviamente, sapevamo di avere un vincitore). E qualche anno dopo ero pronto a renderlo il mio linguaggio di modellazione principale. A quel tempo CRAN aveva ancora meno di 100 pacchetti ...

Julia potrebbe anche arrivarci. Ma per ora ho il sospetto che molti di noi lavoreranno in R, e hanno solo qualche curioso sguardo su Julia.


1
dal momento che per quanto ne so non ci sono piani per julia di avere un compilatore statico per consentire l'incorporamento in C ++, potremmo dover aspettare un po 'di tempo
pyCthon,

48

Il piano di sviluppo di Julia, come ho descritto in questa risposta, è quello di consentire la compilazione del codice Julia in librerie condivise, richiamabile utilizzando l'ABI C. Una volta che ciò accade, sarà facile chiamare il codice Julia da R come lo è chiamare il codice C / C ++. Vi è, tuttavia, una buona dose di lavoro richiesto prima che ciò diventi possibile.


4
Sembra molto promettente. Io (e penso che gli altri) vedo Julia come un ottimo sostituto di come Matlab è attualmente utilizzato, per risultati pesanti dal punto di vista del calcolo che richiedono ancora più intuizione matematica di quella fornita da C e dai suoi simili. Per questo, R e Julia potrebbero essere un ottimo complemento. Anche se Julia soppianta R (e starei bene, francamente), ci vorrà almeno un decennio prima che la biblioteca statistica di Julia sia altrettanto ricca, quindi nel frattempo le capacità di interfacciamento tra R e Julia possono aiutare ad aprire prosperano il calcolo statistico delle risorse.
Ari B. Friedman,

8
Questa situazione è cambiata da quando l'hai scritta? (ps, adoro Julia, grazie per il tuo lavoro!)
Andy Hayden,

23

Un rapido aggiornamento Da quando questa domanda è stata posta, ci sono stati gli inizi di un pacchetto Julia che consente di chiamare i programmi R da Julia.

Altro qui: https://github.com/lgautier/Rif.jl


1
Grazie, ma vedi i commenti dello stesso lgautier sopra. Questa è la direzione opposta. Voglio chiamare Julia dall'interno di R.
Ari B. Friedman il

5
+1 perché in un argomento così ristretto come Julia ogni informazione è piuttosto istruttiva
Qbik

Come ha detto @ AriB.Friedman, questa non è una nuova informazione - e tutti vogliamo chiamare Julia da R, non viceversa.
Martin Mächler,

13

Qualcuno ha visto questo progetto?

https://github.com/armgong/RJulia

Abbastanza nuovo ma sembra fare esattamente ciò che è richiesto!


4
Grazie per il suggerimento. In effetti questa sarebbe la soluzione se funzionasse. Ho provato a installare (usando l'attuale R 3.1.2 patchato) e julia (0.4.0-dev .. aggiornato il 30 dicembre 2014 come pacchetto Ubuntu). Quindi la compilazione non è riuscita e ho aperto il numero di github github.com/armgong/RJulia/issues/10 Speriamo di andare oltre ... presto
Martin Mächler il

1
Qualche progresso? Ricevo notifiche di sviluppo piuttosto attive dal loro repository github, quindi immagino che i problemi vengano risolti ...
Adam

2
Infatti! Non è stato seguito qui, ma nella pagina dei problemi sopra: tutti i problemi principali sono stati tutti rimossi. Mi ero offerto volontario per avvicinare il pacchetto alla liberazione (al CRAN), in particolare aggiungendo utili pagine di aiuto. Ma sfortunatamente, sono troppo profondo in altre faccende impegnative, quindi per ora questo deve aspettare (per me).
Martin Mächler,

11

Creo un pacchetto R chiamato di JuliaCallrecente, che incorpora Julia in R. Il pacchetto è su CRAN.

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

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

L'utilizzo del pacchetto è così:

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)

Come puoi vedere, puoi inviare stringhe di comando e chiamare le funzioni di Julia molto facilmente.

E ci sono anche alcuni pacchetti R che avvolgono i pacchetti Julia usando JuliaCall, ad esempio,

  • convexjlr per Discipline Convex Programming in R utilizzando Convex.jl, che è anche su CRAN.
  • ipoptjlr, un'interfaccia R per Interior Point OPTimizer (IPOPT) che utilizza il pacchetto Julia Ipopt.jl.

Benvenuto per qualsiasi feedback su JuliaCall!!


7

Esiste anche il pacchetto XRJulia della famiglia di pacchetti XR che punta a e X tendendo R di John Chambers (uno dei creatori di R). Utilizza un approccio un po 'diverso (JSON) per trasferire i dati tra Julia e R, quindi rJulia e pacchetti simili.


5

Potresti anche voler dare un'occhiata al mio tentativo: il JuliaConnectoRpacchetto R. Il pacchetto è disponibile da GitHub e CRAN .

Il suo obiettivo è importare le funzioni da Julia direttamente in R in modo tale che possano essere utilizzate come funzioni R nel codice R. I valori di ritorno delle funzioni Julia vengono tradotti in strutture di dati R, che possono essere utilizzate in R e possono essere restituite a Julia. Per un'ulteriore integrazione di Julia e R, è anche possibile richiamare da Julia a R passando le funzioni R come funzioni di callback.

Simile a XRJulia, JuliaConnectoR si basa su TCP, ma è orientato a livello funzionale e utilizza un formato di streaming personalizzato ottimizzato anziché i messaggi JSON basati su testo come XRJulia. Uno dei vantaggi della comunicazione tramite TCP è la stabilità rispetto alle diverse versioni di Julia e R. Questo è molto più difficile da mantenere con un'integrazione a livello di interfacce C come fanno RCall e JuliaCall.

Il pacchetto funziona con Julia ≥ 1.0 e una vasta gamma di versioni R.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.