连接R和Julia?
Julia对于快速和语法理解的计算看起来非常有前途(例如这里 ),但是我怀疑它在整个统计工作stream程方面还不会在R的附近。 所以我想用在R程序中主要使用C ++的地方:优化代码的慢速部分。 在我投入时间学习Julia之前,我很好奇在R代码中embedded了Julia片段的设备。
所以:
- 连接R和Julia有哪些设施?
- 它们是多么的健壮和深思熟虑,在零到Rcpp的范围内呢?
我想从R中调用Julia,就像Rcpp现在允许从R中调用C ++一样。 我不想从Julia打电话给R。 (所以RCall.jl不会工作)
R从r看起来相当不错R CMD check
运行时没有警告或错误(如果julia
安装正确的话)。
在我看来,最大的TODO是让Julia返回构成R中真正基本的灵活通用数据结构的命名列表。
请注意,Doug Bates提醒我关于RCall
[ https://github.com/JuliaStats/RCall.jl ]从Julia到R(即R到Julia的另一个方向)的双向接口。 此外,道格build议瞄准茱莉亚0.4.0,而不是目前的茱莉亚稳定版本。
自从道格·贝茨(Doug Bates)在一月份发给我一个小提醒以来,我也一直在看朱莉娅 。 但是就像@ gsk3一样,我在“Rcpp比例”上测量它,因为我想将丰富的R对象传递给Julia。 而这似乎并没有得到支持。
朱莉娅有一个很好的和简单的C接口。 所以.C()
得到了像.C()
这样的东西。 但是正如最近在r-devel上所讨论的那样,你真的不需要.C()
,在大多数情况下,你需要使用.Call()
来传递表示真实R对象的实际SEXPvariables。 所以现在我看到由于这个限制,从R的Julia范围很小。
也许一个使用tcp / ip到Rserve的间接接口可能是Julia成熟一点之前的第一个开始,我们得到一个合适的C ++接口。 或者,我们使用基于Rcpp的东西从R到C ++,然后再进入我们将数据input到Julia的中间层[需要写入的人员],就像实际的R API只提供一个C层一样。 不知道。
而一天结束时,可能需要一些耐心。 我在1996年或1997年左右开始看R,当时Fritz Leisch在comp.os.linux.announce新闻组上发表了第一个公告。 而且R当时的设备相当有限(但是S语言的全部承诺,当然,我们知道我们有一个胜利者)。 几年后,我准备把它作为我的主要build模语言。 那时候,CRAN还有不到100个套餐的…
茱莉亚可能会到达那里。 但是现在我怀疑我们中的很多人会在R里完成工作,并且对Julia有一些好奇的一瞥。
正如我在这个答案中所描述的,Julia开发计划是允许将Julia代码编译到共享库,可以使用C ABI进行调用。 一旦发生这种情况,从R调用Julia代码就像调用C / C ++代码一样容易。 但是,在这成为可能之前,还需要做大量的工作。
快速更新。 自从问了这个问题之后,一个Julia包的开始,允许从Julia内部调用R程序。
更多在这里: https : //github.com/lgautier/Rif.jl
我最近创build了一个名为JuliaCall
的R包,它将Juliaembedded到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)
正如你所看到的,你可以发送命令string,并很容易地调用Julia函数。
例如,还有一些使用JuliaCall
包装Julia包的R包,
- 使用Convex.jl(也在CRAN上)的R中的Disciplined凸
convexjlr
编程。 -
ipoptjlr
,使用Julia包Ipopt.jl
内部点OPTimizer的R接口(IPOPT)。
欢迎任何有关JuliaCall
反馈!
另外还有XR家族的XRJulia软件包 ,旨在由John Chambers(R的创build者之一)的X趋向R. 它使用一些不同的方法(JSON)在Julia和R之间传输数据,然后是rJulia和类似的包。