在julia循环中调用R函数是否值得?

时间:2017-10-25 11:13:00

标签: r julia

这个问题可能非常幼稚但是在Julia循环(使用RCall模块)而不是R循环内调用R函数在性能方面是否有优势(因为R循环很慢)?当然,来自朱莉娅的众多R Call看起来效率不高但有人测试过它吗?

我希望有些专家可以指出这种方法的限制和优点。谢谢。

1 个答案:

答案 0 :(得分:3)

tl; dr 这取决于但可能不是。

基本上"它取决于"。但是,如果你在循环中所做的只是调用一段R代码,那么可能不会...即开销将比仅用一种语言完成所有工作更大。如果您可以在想要使用的底层R包中找到C绑定(它们可能存在也可能不存在),那么使用ccall可能是值得的。

非常粗略的基准测试(少量盐,额外运行编译未显示)。

f1(N) = begin
   R"x=0"
   for i in 1:N
       R"x = x + $i*1.4"
   end
   x = rcopy(R"x")
end


f2(N) = begin rcopy(R"""
   x = 0
   for (i in 1:$N) {
       x = x + i*1.4
   }
   x
   """)
 end

julia> @time f1(10000)
  0.706926 seconds (919.54 k allocations: 26.697 MiB, 1.80% gc time)
7.0007e7

julia> @time f2(10000)
  0.010227 seconds (129 allocations: 4.281 KiB)
7.0007e7