¿Vinculando a R y Julia?

135

Julia parece muy prometedora para un cálculo rápido y sintaxis (por ejemplo, aquí ), pero sospecho que todavía no estará cerca de R en términos de flujo de trabajo de estadísticas generales durante algún tiempo. Así que me gustaría usarlo donde C ++ se usa principalmente en programas R: para optimizar porciones lentas de código. Sin embargo, antes de invertir el tiempo en aprender Julia, tengo curiosidad por saber qué facilidades hay para incrustar fragmentos de Julia en el código R.

Entonces:

  • ¿Qué facilidades existen para unir a R y Julia?
  • ¿Qué tan robustos y bien pensados ​​son, en una escala de cero a Rcpp?

Quiero llamar a Julia desde R, así como Rcpp permite llamar a C ++ desde R ahora mismo. No quiero llamar a R desde Julia. (Entonces RCall.jl no funcionaría)

Ari B. Friedman
fuente
77
Mi conjetura es que usted sería una entidad que adopta muy temprano y sujeto a las sanciones. Me alegraría estar equivocado. También me alegraría que hicieras el trabajo y allanes el camino para nosotros, los adoptadores medianos ...
Ben Bolker
15
Las funciones que usan en los puntos de referencia de rendimiento parecen una forma bastante inusual de usar R: github.com/JuliaLang/julia/blob/master/test/perf/perf.R . Es casi como poner diesel en un Ferarri ...
James
2
La pregunta es pertinente. AC ABI para Julia parece estar surgiendo. Existe la posibilidad de que pronto intente crear una interfaz de Julia a R.
lgautier
44
Tengo un puente de Julia a R que funciona más o menos ( github.com/lgautier/Rif.jl ). Ir al revés depende del trabajo aún en progreso en el extremo de Julia.
lgautier
3
@lgautier Espero sinceramente que consigas reanudar tu trabajo. Demonios, si hubiera una página kickstarter para apoyar esto, seguro que estaría allí.
Maxim.K

Respuestas:

42

El paquete RJulia R se ve bastante bien ahora desde R. se R CMD checkejecuta sin advertencias o errores (si juliaestá instalado correctamente).

El mayor TODO en mi opinión es lograr que Julia devuelva listas con nombre que constituyen la estructura de datos generales flexible realmente básica en R.

Tenga en cuenta que Doug Bates me alertó sobre RCall, una interfaz bidireccional de Julia a R (es decir, la otra dirección que R a Julia). Además, Doug recomendó apuntar a julia 0.4.0 en lugar de las versiones estables actuales de julia.

Martin Mächler
fuente
57

Yo también he estado mirando a Julia desde que Doug Bates me envió un aviso en enero . Pero como @ gsk3, mido esto en una "escala Rcpp", ya que me gustaría pasar objetos R ricos a Julia. Y eso no parece ser compatible en absoluto en este momento.

Julia tiene una interfaz C agradable y simple. Entonces eso nos da algo así .C(). Pero como se discutió recientemente en r-devel, realmente no desea .C(), en la mayoría de los casos, lo que desea es .Call()pasar variables SEXP reales que representen objetos R reales. Entonces, ahora veo poco margen para Julia de R debido a esta limitación.

Tal vez una interfaz indirecta que use tcp / ip para Rserve podría ser un primer comienzo antes de que Julia madure un poco y obtengamos una interfaz C ++ adecuada. O usamos algo basado en Rcpp para pasar de R a C ++ antes de ingresar a una capa intermedia [que alguien tendría que escribir] desde la cual le enviamos datos a Julia, al igual que la API R real solo ofrece una capa C. No sé.

Y al final del día, se puede necesitar un poco de paciencia. Comencé a mirar R alrededor de 1996 o 1997 cuando Fritz Leisch hizo los primeros anuncios en el grupo de noticias comp.os.linux.announce. Y R tenía instalaciones bastante limitadas entonces (pero la promesa completa del lenguaje S, por supuesto, si supiéramos que teníamos un ganador). Y unos años más tarde estaba listo para convertirlo en mi lenguaje principal de modelado. En ese momento, CRAN todavía tenía menos de 100 paquetes ...

Julia bien puede llegar allí. Pero por ahora sospecho que muchos de nosotros haremos el trabajo en R, y solo tendremos algunas miradas curiosas sobre Julia.

Dirk Eddelbuettel
fuente
1
desde mi conocimiento, no hay planes para que julia tenga un compilador estático para permitir la incrustación en C ++, es posible que tengamos que esperar un tiempo
pyCthon
48

El plan de desarrollo de Julia, como lo describí en esta respuesta, es permitir la compilación del código de Julia en bibliotecas compartidas, que se puede llamar usando el C ABI. Una vez que esto suceda, será tan fácil llamar al código de Julia desde R como llamar al código C / C ++. Sin embargo, se requiere una buena cantidad de trabajo antes de que esto sea posible.

StefanKarpinski
fuente
44
Esto suena muy prometedor. Yo (y creo que otros) veo a Julia como un gran reemplazo para la forma en que se usa actualmente Matlab, para obtener resultados pesados ​​de cómputo que aún requieren más intuición matemática que C y su tipo. Para eso, R y Julia podrían ser un complemento increíble. Incluso si Julia suplanta a R (y francamente estaría bien con eso), pasará al menos una década antes de que la biblioteca de estadísticas en Julia sea tan rica, por lo tanto, mientras tanto, las capacidades de interfaz entre R y Julia pueden ayudar a abrir Fuente de computación estadística prosperar.
Ari B. Friedman
8
¿Ha cambiado esta situación desde que escribiste esto? (ps estoy amando Julia, gracias por su trabajo en él!)
Andy Hayden
23

Una actualización rápida Desde que se hizo esta pregunta, ha habido el comienzo de un paquete de Julia que permite llamar a los programas R desde dentro de Julia.

Más aquí: https://github.com/lgautier/Rif.jl

aviks
fuente
1
Gracias, pero vea los comentarios del propio lgautier arriba. Esta es la dirección opuesta. Quiero llamar a Julia desde R.
Ari B. Friedman
55
+1 porque en un tema tan estrecho como Julia cada información es bastante informativa
Qbik
Como dijo @ AriB.Friedman, esta no es información nueva, y todos queremos llamar a Julia desde R, no al revés.
Martin Mächler
13

¿Alguien ha visto este proyecto?

https://github.com/armgong/RJulia

¡Bastante nuevo pero parece estar haciendo exactamente lo que se solicita!

Adán
fuente
44
Gracias por la pista. De hecho, esta sería la solución si funcionara. Intenté instalar (usando el parche R 3.1.2 muy actual) y julia (0.4.0-dev .. actualizado el 30 de diciembre de 2014 como paquete ubuntu). Luego la compilación falló y abrí el problema de github github.com/armgong/RJulia/issues/10 Esperemos que lleguemos más lejos ... pronto
Martin Mächler
1
¿Cualquier progreso? Recibo notificaciones de desarrollo bastante activas de su repositorio de Github, así que imagino que los problemas se están solucionando ...
Adam
2
¡En efecto! No hice seguimiento aquí, pero en la página de problemas anterior: se eliminaron todos los problemas principales. Me ofrecí para acercar el paquete a ser liberable (a CRAN), es decir, agregando páginas de ayuda útiles. Pero desafortunadamente, estoy demasiado metido en otros asuntos ocupados, así que esto tiene que esperar (por mí) por ahora.
Martin Mächler
11

Creo un paquete R llamado JuliaCallrecientemente, que incorpora a Julia en R. El paquete está en CRAN.

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

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

El uso del paquete es así:

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)

Como puede ver, puede enviar cadenas de comandos y llamar a las funciones de Julia con mucha facilidad.

Y también hay algunos paquetes R que envuelven paquetes de Julia usando JuliaCall, por ejemplo,

  • convexjlr para la programación disciplinada convexa en R usando Convex.jl, que también está en CRAN.
  • ipoptjlr, una interfaz R para OPTimizer de punto interior (IPOPT) con el paquete Julia Ipopt.jl.

Bienvenido a cualquier comentario sobre JuliaCall!!

Consistencia
fuente
7

También está el paquete XRJulia de la familia de paquetes XR cuyo objetivo es e X tender R de John Chambers (uno de los creadores de R). Utiliza un enfoque un poco diferente (JSON) para transferir datos entre Julia y R, luego rJulia y paquetes similares.

vh-d
fuente
5

También es posible que desee ver mi intento: el JuliaConnectoRpaquete R. El paquete está disponible en GitHub y CRAN .

Su objetivo es importar funciones de Julia directamente en R para que puedan usarse como funciones R en el código R. Los valores de retorno de las funciones de Julia se traducen en estructuras de datos R, que se pueden usar en R y también se pueden devolver a Julia. Para una mayor integración de Julia y R, también es posible volver a llamar de Julia a R pasando funciones de R como funciones de devolución de llamada.

Similar a XRJulia, JuliaConnectoR se basa en TCP, pero está orientado funcionalmente y utiliza un formato de transmisión personalizado optimizado en lugar de mensajes JSON basados ​​en texto como lo hace XRJulia. Una ventaja de comunicarse por TCP es la estabilidad con respecto a las diferentes versiones de Julia y R. Esto es mucho más difícil de mantener con una integración a nivel de interfaces C como RCall y JuliaCall.

El paquete funciona con Julia ≥ 1.0 y una amplia gama de versiones R.

esel
fuente