我是Julia世界的新手,我试图从R调用julia mapslices函数。但是我有以下问题:
library(XRJulia)
japply=JuliaFunction(juliaEval("function(a) return(mapslices(sum,a,[1])) end"))
a=array(runif(16),c(4,4))
juliaGet(japply(juliaSend(a)))
# [,1] [,2] [,3] [,4]
#[1,] 1.083545 2.426658 2.310691 1.44339
#But
a=array(runif(32),c(4,4,2))
juliaGet(japply(juliaSend(a)))
# Error in checkSlotAssignment(object, name, value) :
# ‘.Data’ is not a slot in class “array”
我做错了什么?谢谢
答案 0 :(得分:1)
你也可以尝试我的包JuliaCall
,它将Julia嵌入R中。在这种情况下,用法与XRJulia
非常相似。 Julia中的多维数组只是自动转换为R中的多维数组。
library(JuliaCall)
julia_setup()
japply=julia_eval("function(a) return(mapslices(sum,a,[1])) end")
a=array(runif(16),c(4,4))
japply(a)
# [,1] [,2] [,3] [,4]
#[1,] 1.083545 2.426658 2.310691 1.44339
a=array(runif(32),c(4,4,2))
japply(a)
#, , 1
#
# [,1] [,2] [,3] [,4]
#[1,] 3.119738 3.116167 2.299303 1.96874
#
#, , 2
#
# [,1] [,2] [,3] [,4]
#[1,] 1.578722 1.280093 0.6427822 2.786489
XRJulia
和JuliaCall
之间的主要区别在于XRJulia
连接到R中的Julia,而JuliaCall
将Julia嵌入R中。JuliaCall
具有性能优势XRJulia
当你需要在R和Julia之间传输大型向量或矩阵时,它会在Julia的启动时做更多的工作(尤其是第一次)。