157

Julia 看起来非常有希望用于快速和语法健全的计算(例如这里),但我怀疑它在一段时间内不会在整体统计工作流程方面接近 R。所以我想在 C++ 主要用于 R 程序的地方使用它:优化代码的慢部分。不过,在我花时间学习 Julia 之前,我很好奇有哪些工具可以将 Julia 片段嵌入到 R 代码中。

所以:

  • 有哪些设施可以连接 R 和 Julia?
  • 在从零到 Rcpp 的范围内,它们有多健壮和经过深思熟虑?

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

4

8 回答 8

62

自从一月份 Doug Bates 给我发了单挑后,我也一直在关注 Julia。但就像@gsk3 一样,我用“Rcpp 量表”来衡量它,因为我想将丰富的 R 对象传递给 Julia。现在似乎根本不支持这一点。

Julia 有一个漂亮而简单的 C 接口。所以这让我们得到了类似的东西.C()。但正如最近在 r-devel 上讨论的那样,你真的不想要.C(),在大多数情况下,你宁愿想要.Call()传递代表真实 R 对象的实际 SEXP 变量。因此,由于这个限制,现在我看到 R 中的 Julia 的空间很小。

也许在 Julia 成熟一点之前,使用 tcp/ip 到 Rserve 的间接接口可能是第一个开始,我们得到一个合适的 C++ 接口。或者我们使用基于 Rcpp 的东西从 R 到 C++,然后我们进入一个中间层[有人必须编写],从中我们将数据馈送到 Julia,就像实际的 R API 只提供一个 C 层一样。我不知道。

归根结底,可能需要一些耐心。我在 1996 年或 1997 年左右开始关注 R,当时 Fritz Leisch 在 comp.os.linux.announce 新闻组上发布了第一个公告。那时 R 的设施相当有限(但是 S 语言的全部承诺,当然,我们知道我们有一个赢家)。几年后,我准备将其作为我的主要建模语言。那时 CRAN 还不到 100 个包裹...

朱莉娅很可能会到达那里。但现在我怀疑我们中的许多人会在 R 中完成工作,并且对 Julia 有一些好奇的一瞥。

于 2012-04-01T17:52:37.877 回答
55

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

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

请注意,Doug Bates 提醒我 RCall是从 Julia 到 R 的双向接口(即 R 到 Julia 的另一个方向)。此外,Doug 建议以 julia 0.4.0为目标, 而不是 julia 的当前稳定版本。

自从上面写了之后,又出现了几个接口:现在(2021-04),我们有 R 包

于 2015-08-12T17:06:22.317 回答
53

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

于 2012-05-23T01:06:14.723 回答
25

快速更新。自从提出这个问题以来,一个 Julia 包已经开始出现,它允许人们从 Julia 中调用 R 程序。

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

于 2013-02-02T18:10:04.393 回答
25

我创建了一个名为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 在 R 中进行有纪律的凸编程,它也在 CRAN 上。
  • ipoptjlr,一个使用 Julia 包的内部点优化器 (IPOPT) 的 R 接口Ipopt.jl

欢迎任何反馈JuliaCall

于 2017-09-01T15:49:36.970 回答
15

有人看过这个项目吗?

https://github.com/armgong/RJulia

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

于 2014-10-08T11:10:50.590 回答
9

还有来自XR软件包系列的XRJulia 软件包,旨在通过 John Chambers(R 的创建者之一)实现 e X趋向R。它使用稍微不同的方法 (JSON) 在 Julia 和 R 之间传输数据,然后在 rJulia 和类似包之间传输数据。

于 2017-04-17T12:31:18.130 回答
9

您可能还想查看我的尝试:JuliaConnectoRR-package。该软件包可从GitHubCRAN获得。

It's goal is to import functions from Julia directly in R such that they can be used like R functions in R code. The return values of Julia functions are translated to R data structures, which can be used in R and also be passed back to Julia. For a further integration of Julia and R, it is also possible to call back from Julia to R by passing R functions as callback functions.

Similar to XRJulia, the JuliaConnectoR relies on TCP, but it is functionally oriented and uses an optimized custom streaming format instead of text-based JSON messages as XRJulia does. One advantage of communicating by TCP is the stability with respect to different versions of Julia and R. This is much harder to maintain with an integration at the level of C interfaces like RCall and JuliaCall do.

The package works with Julia ≥ 1.0 and a wide range of R versions.

于 2019-06-16T20:04:27.970 回答