通过XRJulia将公式从R传递给Julia

通过XRJulia将公式从R传递给Julia,r,julia,R,Julia,我试图通过XRJulia使用R的Julia来拟合一些回归模型。我想把R数据和公式对象传递给Julia。到目前为止,我的情况如下: library(XRJulia) findJulia(test=T) # Works fine juliaEval("using MixedModels") jlmerj<-juliaEval(" function(f,d) m=fit(LinearMixedModel,f,d) return(m) end ") jlmer=JuliaFun

我试图通过XRJulia使用R的Julia来拟合一些回归模型。我想把R数据和公式对象传递给Julia。到目前为止,我的情况如下:

library(XRJulia)
findJulia(test=T) # Works fine
juliaEval("using MixedModels")

jlmerj<-juliaEval("
 function(f,d)
   m=fit(LinearMixedModel,f,d)
   return(m)
 end
 ")
jlmer=JuliaFunction(jlmerj)

jdata<-juliaSend(data[,c('IRI_EC','learnid')])
jfrm<-juliaEval("@formula(IRI_EC ~  1 + (1|learnid))")
但此呼叫失败(模糊):


res您能给出一个运行代码的示例数据集吗

再次检查后,我怀疑问题不在于公式,而在于
XRJulia
中R
data.frame
的转换,因为在您的消息中可以看到
jdata
Dict
(字典)的代理,而不是
DataFrame
julia
中类似的东西。我还(简要地)签入了
MixedModels
,似乎包无法将
Dict
作为数据集处理

JuliaCall
的用法有点类似于
XRJulia
,但它会将R
data.frame
转换为
julia
DataFrame
。在您的示例中使用
XRJulia
,我觉得还可以。因此,这适用于
JuliaCall
但不适用于
XRJulia
的事实也意味着问题在于
XRJulia
中的
数据.frame
的转换

这可能是因为
XRJulia
目前缺乏在R中转换
data.frame
s的能力。 如果是这种情况,我可以考虑两种(理论上)可能的方法来处理这个问题,第一种是将数据集作为
DataFrame
直接读入
julia
,另一种是在
jlmerj
函数中将
Dict
转换为
DataFrame
。如果给出了一个示例数据集,我可以在该数据集上尝试解决方案

顺便说一句,
MixedModels
的作者与我讨论了使用
JuliaCall
基于
MixedModels
构建R包的可能性,如果发生这种情况,我认为从R尝试
MixedModels
会容易得多

更新1:关于在
XRJulia
中为特定的迷你数据集转换数据帧的示例

library(XRJulia)
findJulia(test = T) # Works fine
juliaEval("using MixedModels")

juliaEval("using DataFrames")

jlmerj <- juliaEval("
                  function(f,d)
                  m=fit(LinearMixedModel,f,d)
                  return(m)
                  end
                  ")
jlmer <- JuliaFunction(jlmerj)

mindata <- data.frame(IRI_EC = c(15, 14, 27, 0, 22, 16, 23, 17, 20, 26), learnid = factor(1:10))

jfrm <- juliaEval("@formula(IRI_EC ~  1 + (1|learnid))")

jIRI_EC <- juliaSend(mindata$IRI_EC) ## send columns one by one
## first convert factors to integers and convert back in julia
jlearnid <- juliaCall("CategoricalArrays.CategoricalArray", juliaSend(as.integer(mindata$learnid))

## combine columns to create dataframe in julia
jdata <- juliaEval(paste0('DataFrame(Dict([(:IRI_EC,', juliaName(jIRI_EC),
                          '), (:learnid, ', juliaName(jlearnid), ')]))'))

res <- jlmer(jfrm,jdata)

res
库(XRJulia)
findJulia(test=T)#工作正常
juliaEval(“使用混合模型”)
juliaEval(“使用数据帧”)

嗨,我是朱利亚卡尔的作者。据我所知,JuliaCall确实从函数返回julia对象,并尝试将julia对象转换为R对象;在自动转换失败的情况下,返回julia对象的包装器,非常类似于XRJulia中的julia代理对象。唯一的区别是,XRJulia以非常简洁的形式显示julia代理对象,JuliaCall提供了非常详细的信息,因此可能这就是为什么您认为JuliaCall只打印结果的原因?您可以使用julia函数从返回的对象提取信息,也可以使用JuliaCall提供的一些实用程序函数提取信息一些简单情况下的信息。顺便说一句,我不太熟悉MixedModels包。您能提供一些数据集和您在JuliaCall中使用的命令供我检查吗?谢谢。对不起,我不太清楚。是的,JuliaCall确实返回一个Julia对象或包装器,我已经能够从中提取一些东西-我认为问题在于MixedModels没有很好地记录其返回值,因此很难从中了解我想要的东西(它有各种提取程序,但有些还没有达到它所能适应的模型的全部功能)。因此,关于朱利亚卡尔的问题(这真是令人惊讶)很可能是没有意义的。也就是说,我真的很好奇如何将公式传递给XRJulia中的函数。这是一个产生相同结果的最小数据集:这是一个产生相同结果的最小数据集:Minda我尝试将R数据帧转换为julia数据帧并成功,但是这个过程并不容易,而且专门针对这个简化的数据集,这有点难以推广。你可以看到我更新后的帖子。我想最好是直接把数据读给朱莉娅。哇,那是。。。有趣。这是朱利亚卡尔的一个很好的论点谢谢你的帮助。
res<-jlmer(jfrm,jdata)
Error: Evaluating Julia expression: R_1_7(R_1_9, R_1_29)
library(XRJulia)
findJulia(test = T) # Works fine
juliaEval("using MixedModels")

juliaEval("using DataFrames")

jlmerj <- juliaEval("
                  function(f,d)
                  m=fit(LinearMixedModel,f,d)
                  return(m)
                  end
                  ")
jlmer <- JuliaFunction(jlmerj)

mindata <- data.frame(IRI_EC = c(15, 14, 27, 0, 22, 16, 23, 17, 20, 26), learnid = factor(1:10))

jfrm <- juliaEval("@formula(IRI_EC ~  1 + (1|learnid))")

jIRI_EC <- juliaSend(mindata$IRI_EC) ## send columns one by one
## first convert factors to integers and convert back in julia
jlearnid <- juliaCall("CategoricalArrays.CategoricalArray", juliaSend(as.integer(mindata$learnid))

## combine columns to create dataframe in julia
jdata <- juliaEval(paste0('DataFrame(Dict([(:IRI_EC,', juliaName(jIRI_EC),
                          '), (:learnid, ', juliaName(jlearnid), ')]))'))

res <- jlmer(jfrm,jdata)

res