连结R和Julia?


135

茱莉亚(Julia)看起来非常有希望进行快速且语法合理的计算(例如,在此处),但我怀疑在一段时间内,就整体统计工作流程而言,它不会接近R。因此,我想在R程序中主要使用C ++的地方使用它:优化慢速代码。但是,在花时间学习Julia之前,我很好奇在R代码中嵌入Julia代码段有哪些便利。

所以:

  • 有什么设施可以连接R和Julia?
  • 从零到Rcpp,它们有多健壮和经过深思熟虑?

我想从R中调用Julia,就像Rcpp现在允许从R中调用C ++一样。我不想打给茱莉亚打电话。(因此RCall.jl无法正常工作)


7
我的猜测是,您将是一个早期采用者,并会受到这些处罚。我很乐意做错了-我也很乐意让您为我们的中级采用者做好这项工作并为我们铺平道路……
Ben Bolker 2012年

15
他们在性能基准测试中使用的功能似乎是使用R的一种非常不寻常的方式:github.com/JuliaLang/julia/blob/master/test/perf/perf.R。这几乎就像将柴油放入Ferarri ...
James

2
这个问题是相关的。朱莉娅的AC ABI似乎正在兴起。我有机会很快建立一个Julia-to-R界面。
lgautier,2012年

4
我有一个大概可以正常工作的Julia-to-R桥(github.com/lgautier/Rif.jl)。要走另一条路,取决于Julia端的工作仍在进行中。
lgautier

3
@lgautier我衷心希望您能继续工作。地狱,如果有一个kickstarter页面来支持这一点,我肯定会在那里。
Maxim.K 2014年

Answers:


42

RJulia [R包看起来相当不错,现在从R. R CMD check运行没有警告或错误(如果julia正确安装)。

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

请注意,道格·贝茨(Doug Bates)提醒我有关 RCall从Julia到R的双向接口(即,从R到Julia的另一个方向)。此外,道格还建议将julia定位为0.4.0, 而不是当前稳定的julia版本。


57

自从道格·贝茨(Doug Bates)在1月份给我发出提示以来,我也一直在看朱莉娅。但是,就像@ gsk3一样,我希望以“ Rcpp尺度”进行度量,因为我想将丰富的R对象传递给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
因为据我所知,julia没有计划使用静态编译器来允许嵌入到C ++中,所以我们可能不得不等待一段时间
pyCthon 2013年

48

正如我在此答案中所述,Julia开发计划是允许将Julia代码编译为可使用C ABI调用的共享库。一旦发生这种情况,从R调用Julia代码就像调用C / C ++代码一样容易。但是,在此之前需要做大量的工作。


4
这听起来很有希望。我(以及我认为其他人)将Julia看作是当前Matlab使用方式的理想替代品-对于计算繁重的结果,仍然需要比C及其同类产品更多的数学直觉。为此,R和Julia可能是一个了不起的补充。即使Julia取代了R(坦率地说,我会接受的),至少要等十年之后,Julia中的统计库才能变得如此丰富,因此R和Julia之间的接口功能可以帮助打开源统计计算蓬勃发展。
阿里·弗里德曼

8
自从您写这篇文章以来,这种情况有没有改变?(ps我朱莉娅,感谢您的努力!)
Andy Hayden 2014年

23

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

此处更多内容:https//github.com/lgautier/Rif.jl


1
谢谢,但请参阅上面的lgautier本人的评论。这是相反的方向。我想从内R.致电朱莉娅
阿里B.弗里德曼

5
+1,因为在诸如Julia这样狭窄的话题中,每个信息都非常有用
-Qbik

正如@ AriB.Friedman所说,这没有新信息-我们每个人都想从R调用Julia,而不是相反。
MartinMächler'15

13

有人看过这个项目吗?

https://github.com/armgong/RJulia

相当新,但似乎完全按照要求进行!


4
感谢您的提示。确实,如果可行,这将是解决方案。我尝试安装(使用最新的R 3.1.2修补程序)和julia(0.4.0-dev ..作为ubuntu软件包在2014年12月30日更新)。然后编译失败,我打开github问题 github.com/armgong/RJulia/issues/10 让我们希望进一步……...
MartinMächler2015年

1
任何进展?我从他们的github存储库中获得了非常活跃的开发通知,所以我想这些问题已经解决了……
Adam

2
确实!在这里没有跟进-但在上面的问题页面上:主要问题都已消除。我自愿通过使程序包变得更易于发布(对CRAN),即添加有用的帮助页面。但不幸的是,我在其他忙碌的事情上做得太深了,因此(我)必须暂时等待。
MartinMächler'15

11

我创建了一个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包使用来包装Julia包JuliaCall,例如,

  • convexjlr 使用Convex.jl(也是CRAN)在R中进行有纪律的凸编程。
  • ipoptjlr,是使用Julia包的内部点OPTimizer(IPOPT)的R接口Ipopt.jl

欢迎任何反馈JuliaCall


7

还有XR软件包家族中的XRJulia软件包,旨在通过John Chambers(R的创建者之一)使X趋于R。它使用略有不同的方法(JSON)在Julia和R之间以及rJulia和类似包之间传输数据。


5

您可能还需要检查一下我的尝试:JuliaConnectoRR-package。该软件包可从GitHubCRAN获得

目的是直接从R中的Julia中导入函数,以便可以像在R代码中的R函数一样使用它们。Julia函数的返回值转换为R数据结构,可以在R中使用它,也可以传递回Julia。为了进一步集成Julia和R,还可以通过将R函数作为回调函数传递来从Julia回调到R。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.