链接R和朱莉娅?

时间:2012-04-01 15:43:20

标签: r julia

朱莉娅看起来非常有希望进行快速和语法理智的计算(例如here),但我怀疑它在一段时间内在整体统计工作流程方面不会在R附近。所以我想在C ++主要用于R程序的地方使用它:优化代码的慢速部分。不过,在我花时间学习Julia之前,我很好奇在R代码中嵌入Julia片段的设施是什么。

所以:

  • 有哪些设施可以连接R和Julia?
  • 他们是多么强大和深思熟虑,在零到Rcpp的范围内?

我想从R调用Julia,就像Rcpp现在允许从R内部调用C ++一样。我不想从朱莉娅那里打电话给R. (所以RCall.jl不起作用)

8 个答案:

答案 0 :(得分:53)

我也是have been looking at Julia ever since Doug Bates sent me a heads-up in January。但是像@ gsk3一样,我在“Rcpp规模”上测量它,因为我想将丰富的R对象传递给Julia。现在似乎没有得到任何支持。

Julia有一个漂亮而简单的C接口。这样就可以得到像.C()这样的东西。但正如最近在r-devel上所讨论的那样,你真的不想要.C(),在大多数情况下你更想要.Call()来传递代表真实R对象的实际SEXP变量。因此,由于这种限制,我现在看不到来自R的Julia的范围很小。

使用tcp / ip到Rserve的间接接口可能是Julia成熟之前的第一个开始,我们得到了一个合适的C ++接口。或者我们使用基于Rcpp的东西从R到C ++之前进入我们进入中间层[有人必须编写]之前我们将数据提供给Julia,就像实际的R API只提供C层一样。说不上。

当天结束时,可能需要一些耐心。我开始在1996年或1997年左右看到R,当时Fritz Leisch在comp.os.linux.announce新闻组上发布了第一个公告。然后R的设施相当有限(但是S语言的完全承诺,当然,我们知道我们有一个胜利者)。几年后,我准备将它作为我的主要建模语言。那时CRAN还有不到100个包......

朱莉娅可能会到达那里。但是现在我怀疑我们中的许多人都会在R中完成工作,并且只对Julia进行了一些奇怪的瞥见。

答案 1 :(得分:45)

我在this answer中描述的Julia开发计划是允许将Julia代码编译到共享库,可以使用C ABI进行调用。一旦发生这种情况,从R调用Julia代码就像调用C / C ++代码一样容易。但是,在此之前需要进行大量的工作。

答案 2 :(得分:34)

RJulia R包现在从R. R CMD check运行看起来非常好而没有警告或错误(如果julia已正确安装)。

我认为最大的TODO是让Julia返回命名列表,这些列表构成了R中真正基本灵活的通用数据结构。

请注意,Doug Bates提醒我关于RCall从Julia到R的双向接口(即R到Julia的另一个方向)。此外,道格建议目标是julia 0.4.0 ,而不是目前稳定版的朱莉娅。

答案 3 :(得分:20)

快速更新。自从提出这个问题以来,Julia软件包已经开始,允许人们从Julia内部调用R程序。

更多信息:https://github.com/lgautier/Rif.jl

答案 4 :(得分:11)

有没有人见过这个项目?

https://github.com/armgong/RJulia

相当新,但似乎完全按照要求做了!

答案 5 :(得分:7)

我最近创建了一个名为JuliaCall的R包,它将Julia嵌入到R中。包在CRAN上。

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

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

包的用法如下:

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)

如您所见,您可以发送命令字符串并轻松调用Julia函数。

还有一些R软件包使用JuliaCall包装Julia软件包,例如,

  • convexjlr使用Convex.jl进行R中的训练凸规划,也是在CRAN上。
  • ipoptjlr,使用Julia软件包Ipopt.jl的内部点OPTimizer的R接口(IPOPT)。

欢迎您对JuliaCall !!

的任何反馈

答案 6 :(得分:4)

John Chambers(其中一位创作者之一)还有XRJulia package来自XR系列的here针对e X 倾向 R R)。它使用一种不同的方法(JSON)在Julia和R之间传输数据,然后是rJulia和类似的包。

答案 7 :(得分:1)

您可能还想检查一下我的尝试:JuliaConnector R包。

目标是直接从R中的Julia中导入函数,以便可以像在R代码中的R函数一样使用它们。 Julia函数的返回值转换为R数据结构,可以在R中使用它,也可以传递回Julia。对于基本数据结构,这已经以稳定的方式起作用。该软件包仅是0.1版,但我正在积极地对其进行进一步开发,并且计划在2019年底之前生产可投入生产的产品。 为了进一步整合Julia和R,还可以通过将R函数作为回调函数传递来从Julia回调到R。

JuliaConnectoR与XRJulia类似,它依赖于TCP,但是它在功能上面向并使用优化的自定义流格式,而不是像XRJulia一样使用基于文本的JSON消息。 通过TCP进行通信的一个优势是相对于不同版本的Julia和R的稳定性。要像RCall和JuliaCall那样在C接口级别进行集成,则很难维护这一点。

该软件包适用于Julia≥0.7和多种R版本。