这个问题可能非常幼稚但是在Julia循环(使用RCall模块)而不是R循环内调用R函数在性能方面是否有优势(因为R循环很慢)?当然,来自朱莉娅的众多R Call看起来效率不高但有人测试过它吗?
我希望有些专家可以指出这种方法的限制和优点。谢谢。
答案 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