把 R 和 Julia 联系起来?

Julia 看起来非常适合快速和语法健全的计算(例如 给你) ,但我怀疑它在总体统计工作流方面还不能接近 R。因此,我想在 C + + 主要用于 R 程序的地方使用它: 优化代码中较慢的部分。不过,在我花时间学习 Julia 之前,我很好奇在 R 代码中嵌入 Julia 代码片段有哪些工具。

所以:

  • R 和 Julia 之间有什么联系?
  • 如果从零到 Rcpp 来衡量,它们有多强大和深思熟虑?

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

18087 次浏览

我也是。但是像@gsk3一样,我使用“ Rcpp 刻度”来度量它,因为我希望将富 R 对象传递给 Julia。现在看来,这种说法完全没有得到支持。

Julia 有一个漂亮而简单的 C 接口。所以我们得到了类似 .C()的东西。但是正如最近在 r-devel 上所讨论的,您实际上并不需要 .C(),在大多数情况下,您更愿意使用 .Call()来传递表示真实 R 对象的实际 SEXP 变量。所以现在我看不到 R 代表 Julia 的空间,因为这个限制。

也许在 Julia 稍微成熟一点,我们得到一个合适的 C + + 接口之前,可以先开始使用 tcp/ip 到 Rreserve 的间接接口。或者我们使用一些基于 Rcpp 的东西从 R 到 C + + ,然后再进入一个中间层(必须有人编写) ,从中向 Julia 提供数据,就像实际的 R API 只提供一个 C 层一样。我不知道。

一天结束的时候,我们可能需要一些耐心。我是在1996年或1997年左右开始研究 R 的,当时 Fritz Leisch 在 comp.os.linux.Declaration 新闻组上发布了第一个公告。当时 R 的设备相当有限(当然,如果我们知道我们有一个赢家的话,那么 S 语言的全部前景就是完美的)。几年后,我准备把它作为我的主要建模语言。当时 CRAN 还有不到100个包裹..。

茱莉亚很可能到达那里。但就目前而言,我怀疑我们中的许多人会用 R 语言完成工作,并且会对茱莉亚有一些好奇的瞥见。

正如我在 这个答案中所描述的,Julia 开发计划允许将 Julia 代码编译为共享库,这些库可以使用 C ABI 进行调用。一旦发生这种情况,从 R 调用 Julia 代码就像调用 C/C + + 代码一样容易。然而,在这成为可能之前,还需要进行大量的工作。

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

详情请浏览: https://github.com/lgautier/Rif.jl

有人看过这个项目吗?

Https://github.com/armgong/rjulia

相当新,但似乎正在做什么要求!

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

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

请注意,Doug Bates 提醒我 呼叫是一个从 Julia 到 R 的双向接口(即,与 R 到 Julia 的方向相反)。此外,道格建议针对朱莉娅 0.4.0而不是目前的稳定版本的朱莉娅。

自从编写了上述代码以来,又出现了几个接口: 现在(2021-04) ,我们有了 R 包

还有来自 XR系列软件包的 XRJulia 包裹,目标是 eX趋向于由 John Chambers (R 的创造者之一)设计的 R。它使用一种稍微不同的方法(JSON)在 Julia 和 R 之间传输数据,然后再在 rJulia 和类似的包之间传输数据。

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

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 包,例如,

欢迎对 JuliaCall的任何反馈! !

您可能还想了解我的尝试: JuliaConnectoR R 包。该包可从 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 & ge; 1.0和各种 R 版本。