链接R和朱莉娅?

Linking R and Julia?

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

所以:

  • 连接R和朱莉娅有什么设施?
  • 它们的耐用性和经过深思熟虑的程度是零至Rcpp吗?

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


自从Doug Bates在1月份给我一个单挑局以来,我也一直在关注朱莉娅。但是像@ 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进行了一些奇怪的瞥见。


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


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

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

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


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

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


有没有人见过这个项目?

https://github.com/armgong/RJulia

相当新,但似乎正在做的正是要求!


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

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

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

包的用法如下:

1
2
3
4
5
6
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(IPOPT)的R接口。

欢迎任何有关JuliaCall的反馈!


还有来自XR系列软件包的XRJulia软件包,旨在由John Chambers(R的创建者之一)进行eXtend R。它使用一种不同的方法(JSON)在Julia和R之间传输数据,然后是rJulia和类似的包。


您也可以查看我的尝试:JuliaConnector R-package。

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

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

该套餐适用于Julia&ge; 0.7和各种R版本。