链接R和朱莉娅?

Ari*_*man 128 r julia

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

所以:

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

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

Dir*_*tel 54

自从道格贝茨在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 没有计划有一个静态编译器来允许嵌入 C++,我们可能需要等待一段时间 (2认同)

Ste*_*ski 46

茱莉亚发展规划,我描述这个答案是允许的朱莉娅汇编代码共享库,可调用使用C ABI.一旦发生这种情况,从R调用Julia代码就像调用C/C++代码一样容易.但是,在此之前需要进行大量的工作.

  • 你写这个以来这种情况有变化吗?(ps我爱*朱莉娅,谢谢你的工作!) (7认同)
  • 这听起来很有希望.我(我认为其他人)认为Julia是目前使用Matlab的一个很好的替代品 - 对于计算量很大的结果,仍然需要比C及其同类提供更多的数学直觉.为此,R和Julia可能是一个惊人的补充.即使朱莉娅取代了R(坦白地说,我会很好),至少在十年之前,朱莉娅的统计图书馆已经接近富裕了,所以在此期间,R和朱莉娅之间的接口能力可以帮助打开资源统计计算蓬勃发展. (3认同)

Mar*_*ler 37

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

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

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

  • 截至目前,接受的答案已经过时。当前从 R 调用 Julia 的最佳方法是 JuliaCall (请参阅下面一致性的答案),顺便说一句,它依赖于 RCall.jl (从 Julia 调用 R 的 Julia 包)。 (2认同)
  • 谢谢@Levasco。“到目前为止”你是对的。我承认事情正在发生变化,5.2 年前的“最佳”状态现在已经不再适用。 (2认同)
  • 确实,是时候更新了..谢谢@PatrickT (2认同)

avi*_*iks 21

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

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

  • +1因为在朱莉娅这样狭窄的话题中,每个信息都非常有用 (5认同)
  • 谢谢,但请参阅上面 lgautier 本人的评论。这是相反的方向。我想从 R 内部调用 Julia。 (2认同)

Ada*_*dam 12

有没有人见过这个项目?

https://github.com/armgong/RJulia

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

  • 谢谢你的提示.事实上,如果它有效,这将是解决方案.我尝试安装(使用非常新的R 3.1.2补丁)和julia(0.4.0-dev ..在2014年12月30日更新为ubuntu包).然后编译失败了,我打开了github问题https://github.com/armgong/RJulia/issues/10让我们希望我们能够进一步......很快 (4认同)
  • 任何进展?我从他们的 github 存储库中收到了非常活跃的开发通知,所以我想这些问题正在得到解决...... (2认同)
  • 确实!没有在这里跟进 - 但在上面的问题页面:主要问题都被删除了.我自愿让包裹更接近可释放(到CRAN),即添加有用的帮助页面.但不幸的是,我在其他繁忙的事情上太过深刻,所以现在必须等待(对我来说). (2认同)

Con*_*ncy 9

我创建了一个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)
Run Code Online (Sandbox Code Playgroud)

如您所见,您可以发送命令字符串并轻松调用Julia函数.

还有一些R包用Julia软件包包装JuliaCall,例如,

  • convexjlr 使用Convex.jl进行R中的训练凸规划,这也是在CRAN上.
  • ipoptjlr,使用Julia封装的内部点OPTimizer(IPOPT)的R接口Ipopt.jl.

欢迎任何反馈JuliaCall!!

  • @red_quark为了释放内存,你可以在julia中释放内存,而不是关闭julia。例如,关注全局变量,尽可能使用函数。我最近在 GitHub 上回答了一个类似的问题。也许对你有帮助。&lt;https://github.com/Non-Contradiction/JuliaCall/issues/139&gt; (2认同)

小智 6

还有XR软件包家族的XRJulia软件包,旨在通过John Chambers(R的创建者之一)使X趋于R。它使用略有不同的方法(JSON)在Julia和R之间以及rJulia和类似包之间传输数据。


ese*_*sel 5

您可能还想查看我的尝试:JuliaConnectoRR 包。该软件包可从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 ≥ 1.0 和各种 R 版本。