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接口。这样就可以得到类似
也许使用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.
在我看来,最大的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
相当新,但似乎正在做的正是要求!
我最近创建了一个名为
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软件包使用
-
convexjlr 使用Convex.jl进行R中的纪律凸规划,也是在CRAN上。 -
ipoptjlr ,使用Julia软件包Ipopt.jl 的内部点OPTimizer(IPOPT)的R接口。
欢迎任何有关
还有来自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版本。