2012-04-01 64 views
108

Julia对于快速和语法理解计算(例如here)看起来很有希望,但我怀疑它在整个统计工作流程方面在一段时间内不会在R附近。所以我想在C程序主要用于R程序的地方使用它:优化代码的慢速部分。然而,在我投入时间学习Julia之前,我很好奇在R代码中嵌入了Julia片段的设备。连接R和Julia?

所以:

  • 是那里的连接R和Julia哪些设施?
  • 它们的稳健性和深思熟虑的程度如何,从零到Rcpp?

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

+6

我的猜测*是你会是一个非常早期的采用者并受到这些处罚。我很乐意错误 - 我也很乐意让你做这项工作,并为我们的媒体采用者铺平道路...... – 2012-04-01 16:07:55

+2

为什么不使用NumPy? – Marcin 2012-04-01 16:16:05

+14

他们在性能基准测试中使用的函数看起来像是一个非常不寻常的使用R的方法:https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R。这几乎就像将柴油放入Ferarri ... – James 2012-04-01 18:59:30

回答

25

RJulia [https://github.com/armgong/RJulia] R包看起来相当不错,现在从R R CMD check运行时没有警告或错误(如果julia已正确安装)。

最大TODO在我看来是让朱莉娅返回名为列出了构成R.真正基本灵活的通用数据结构

需要注意的是道格·贝茨提醒我约RCall [https://github.com/JuliaStats/RCall.jl]双向接口朱莉娅到R(即,比R到朱莉娅的另一个方向)。此外,道格建议瞄准茱莉亚0.4.0而不是目前的茱莉亚稳定版本。

50

我也是have been looking at Julia ever since Doug Bates sent me a heads-up in January。但是就像@ gsk3一样,我在“Rcpp scale”上测量它,因为我想将丰富的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层一样。不知道。

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

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

+1

,因为据我所知,是朱莉娅没有计划要有一个静态编译器允许嵌入到C++中,我们可能需要等待一段时间 – pyCthon 2013-08-28 02:30:16

41

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

+3

这听起来很有希望。我(我认为其他人)认为Julia是目前使用Matlab的一个很好的替代品 - 对于计算量大的结果,仍然需要比C及其所提供的更多的数学直觉。对此,R和Julia可能是一个惊人的补充。即使朱莉娅取代了R(坦率地说我也会很好),但至少在Julia的统计数据库接近丰富之前至少还需要十年时间,所以同时R和Julia之间的接口能力可以帮助开放源统计计算蓬勃发展。 – 2012-05-23 02:11:40

+6

自你写这个以后,情况有没有变化? (p.s.我*爱*茱莉亚,感谢您的工作!) – 2014-01-31 02:46:50

19

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

这里更多:https://github.com/lgautier/Rif.jl

+1

谢谢,但看到上面的lgautier自己的意见。这是相反的方向。我想从R. – 2013-02-02 18:14:37

+4

+1内拨打Julia,因为在Julia这样狭窄的话题中,每一个信息都是相当丰富的 – Qbik 2013-04-12 20:15:21

+0

As @ AriB.Friedman说,这没有新的信息 - 我们都想从R打电话给Julia,而不是其他方式。 – 2015-01-02 19:34:35

10

有没有人见过这个项目?

https://github.com/armgong/RJulia

相当新的,但似乎做的是要求什么!

+4

感谢您的提示。事实上,如果它有效,这将是解决方案。我尝试安装(使用非常当前的R 3.1.2修补)和茱莉亚(0.4.0-dev ..更新于2014年12月30日作为Ubuntu的包)。然后编译失败,我打开github问题https://github.com/armgong/RJulia/issues/10让我们希望我们得到进一步......尽快 – 2015-01-02 20:15:06

+1

任何进展?我从他们的github回购中获得非常活跃的开发通知,所以我会想象这些问题正在被解决...... – Adam 2015-01-21 21:12:08

+2

确实!没有在这里跟进 - 但在上面的问题页面上:主要问题都被删除了。我曾经自愿让这个软件包更接近可释放的版本(对CRAN),即通过添加有用的帮助页面。但不幸的是,我在其他忙碌的事情上太深了,所以现在我必须等待(对我来说)。 – 2015-01-23 09:15:43

4

也有XRJulia packageXR家庭套餐瞄准电子商务X由约翰·钱伯斯(R的创造者之一)往往[R。它使用一种不同的方法(JSON)在Julia和R之间,然后在rJulia和类似的包之间传输数据。

4

我最近创建了一个名为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) 

正如你所看到的,你可以发送命令字符串,真正方便地调用朱莉娅功能。

而且也有一些R封装用JuliaCall包裹朱莉娅套餐为例,

  • convexjlr使用Convex.jl,这也是对CRAN中的R纪律凸规划。
  • ipoptjlr,内部点OPTimizer的R接口(IPOPT)使用Julia包Ipopt.jl

欢迎有关JuliaCall的任何反馈!