2012-04-01 7 views
108

Julia sembra molto promettente per il calcolo corretto e sintattico (ad esempio here), ma sospetto che non sarà da nessuna parte vicino a R in termini di flusso di lavoro di statistiche complessive ancora per qualche tempo. Quindi mi piacerebbe usarlo dove C++ è usato principalmente nei programmi R: per ottimizzare porzioni lente di codice. Prima di investire il tempo nell'apprendimento di Julia, però, sono curioso di sapere quali sono le possibilità di incorporare gli snippet di Julia nel codice R.Collegamento di R e Julia?

Quindi:

  • Quali servizi sono là fuori per il collegamento R e Julia?
  • Quanto sono robusti e ben ponderati, su una scala da zero a Rcpp?

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

+6

La mia * ipotesi * è che si sarà presto adottati e soggetti a tali sanzioni. Sarei felice di sbagliarmi, sarei anche felice di averti fatto il lavoro e di aprire la strada a noi medium-adopters ... –

+2

Perché non usare solo NumPy? – Marcin

+14

Le funzioni utilizzate nei benchmark delle prestazioni sembrano un modo piuttosto insolito per utilizzare R: https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R. È quasi come mettere il diesel in un Ferarri ... – James

risposta

25

Il RJulia [https://github.com/armgong/RJulia] pacchetto R sembra abbastanza buono ora da R. R CMD check piste senza avvisi o errori (se julia è installato correttamente).

grande TODO a mio avviso, è quello di ottenere Julia per tornare elenchi con nome, che costituiscono la struttura di dati generali flessibile veramente di base in R.

noti che Doug Bates mi ha avvisato circa RCall [https://github.com/JuliaStats/RCall.jl] un'interfaccia bidirezionale da Julia a R (cioè, l'altra direzione di R a Julia). Inoltre, Doug ha raccomandato di scegliere come target Julia 0.4.0 anziché le attuali versioni stabili di julia.

50

Anch'io have been looking at Julia ever since Doug Bates sent me a heads-up in January. Ma come @ gsk3, lo misuro su una "scala Rcpp" come vorrei passare con Rich oggetti R a Julia. E questo non sembra essere supportato affatto adesso.

Julia ha un'interfaccia C piacevole e semplice. In modo che ci ottiene qualcosa come .C(). Ma come discusso di recente su r-devel, non si vuole davvero il .C(), nella maggior parte dei casi si preferisce lo .Call() per passare le attuali 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 utilizza tcp/ip in Rserve potrebbe essere un primo avvio prima che Julia maturi un po 'e otteniamo un'interfaccia C++ corretta. Oppure usiamo qualcosa basato su Rcpp per ottenere da R a C++ prima di inserire un livello intermedio [che qualcuno dovrebbe scrivere] da cui forniamo il feed di dati a Julia, proprio come l'attuale API R offre solo un livello C. Boh.

E alla fine della giornata, potrebbe essere necessario un po 'di pazienza. Ho iniziato a guardare R attorno al 1996 o al 1997 quando Fritz Leisch ha fatto i primi annunci sul newsgroup comp.os.linux.announce. E R aveva allora strutture piuttosto limitate (ma la piena promessa del linguaggio S, naturalmente, si sapeva che avevamo un vincitore). E qualche anno dopo ero pronto a farne il mio linguaggio di modellazione primaria. A quel tempo CRAN aveva ancora meno di 100 pacchetti ...

Julia potrebbe arrivarci. Ma per ora sospetto che molti di noi lavoreranno in R, e hanno solo alcuni scorci curiosi su Julia.

+1

poiché a mia conoscenza non ci sono piani per Julia per avere un compilatore statico che permetta l'incorporamento in C++, potremmo dover aspettare un po 'di tempo. – pyCthon

41

Il piano di sviluppo Julia, come descritto in this answer, consente la compilazione del codice Julia nelle librerie condivise, richiamabile mediante C ABI. Una volta che questo accade, sarà facile chiamare il codice Julia da R come per chiamare il codice C/C++. C'è, tuttavia, una buona quantità di lavoro richiesto prima che questo diventi possibile.

+3

Sembra molto promettente. Io (e penso altri) vedere Julia come un grande sostituto di come Matlab è attualmente utilizzato - per i risultati di calcolo pesanti che richiedono ancora più intuizioni matematiche di C e dei suoi simili. Per questo, R e Julia potrebbero essere un fantastico complemento. Anche se Julia sostituisse R (e mi andrebbe bene, francamente), ci vorrà almeno un decennio prima che la biblioteca statistica di Julia sia altrettanto ricca, quindi nel frattempo le capacità di interfaccia tra R e Julia possono aiutare ad aprire -scrive l'elaborazione statistica statica. –

+6

Questa situazione è cambiata da quando hai scritto questo? (p.s.so * amorevole * Julia, grazie per il tuo lavoro!) –

19

Un rapido aggiornamento. Da quando è stata posta questa domanda, c'è stato l'inizio di un pacchetto Julia che consente di chiamare i programmi R da Julia.

Maggiori informazioni qui: https://github.com/lgautier/Rif.jl

+1

Grazie, ma vedi i commenti dello stesso lgautier. Questa è la direzione opposta. Voglio chiamare Julia da R. –

+4

+1 perché in un argomento così stretto come Julia ogni informazione è abbastanza informativa – Qbik

+0

Come @ AriB.Friedman ha detto, questo non nuove informazioni - e tutti vogliamo chiamare Julia da R, non il in altro modo. –

10

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 patch R 3.1.2 aggiornato) e julia (0.4.0-dev .. aggiornato il 30 dicembre 2014 come pacchetto di Ubuntu). Quindi la compilazione fallì e aprii il problema github https://github.com/armgong/RJulia/issues/10 Speriamo di ottenere ulteriori ... presto –

+1

Qualche progresso? Ricevo notifiche di sviluppo abbastanza attive dal loro repo github quindi immagino che i problemi siano risolti ... – Adam

+2

Infatti! Non ho seguito qui - ma nella pagina dei problemi qui sopra: Tutti i principali problemi sono stati rimossi. Mi ero offerto volontario per rendere il pacchetto più vicino a essere rilasciabile (a CRAN), vale a dire aggiungendo pagine di aiuto utili. Ma sfortunatamente, sono troppo preso da altre questioni impegnate, quindi per ora devo aspettare (per me). –

4

C'è anche la famiglia XRJulia package da XR di pacchetti che mirano a e X tendono R da 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.

4

Ho creato un pacchetto R chiamato JuliaCall di recente, che incorpora Julia in R. Il pacchetto è in CRAN.

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

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

L'utilizzo del pacchetto è come questo:

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 si può vedere, è possibile inviare stringhe di comando e chiamare funzioni Julia molto facilmente.

E ci sono anche alcuni pacchetti R confezionamento pacchetti di Julia usando JuliaCall, per esempio,

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

Benvenuto per qualsiasi feedback su JuliaCall !!