![](/img/trans.png)
[英]Julia in R (JuliaCall and XRJulia not working with Julia 0.7 or newer)
[英]Passing formulas from R to Julia via XRJulia
我正在嘗試通過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))")
此時,jdata和jfrm似乎是Julia代理對象:
> jdata
Julia proxy object
Server Class: Dict{String,Any}; size: 7
> jfrm
Julia proxy object
Server Class: StatsModels.Formula; size: NA
但是這個調用失敗了(模糊地):
res<-jlmer(jfrm,jdata)
Error: Evaluating Julia expression: R_1_7(R_1_9, R_1_29)
(R_1_7等是juliaName(jlmerj),juliaName(jfrm),juliaName(jdata)返回的函數的名稱)。 相同的模型語法在JuliaCall中可以正常工作(我試圖轉換為XRJulia,因為JuliaCall似乎只打印出擬合結果,而沒有返回我可以有用地轉換回R對象的任何內容)。
其他juliaEvals等功能也可以使用,但使用公式對象無法正常工作。
有人這樣做嗎? 怎么樣?
您能否給出一個示例數據集來運行代碼?
再次檢查之后,我懷疑問題是不是與公式,但與R的轉換data.frame
在XRJulia
,因為在你的消息,你可以看到, jdata
是的代理Dict
(字典),而不是一個DataFrame
或類似julia
事情。 而且,我也(簡短地)簽入了MixedModels
,似乎該程序包無法將Dict
作為數據集處理。
的使用JuliaCall
有點類似XRJulia
但它會[R轉換data.frame
到julia
DataFrame
。 在您的示例中使用XRJulia
對我來說似乎還可以。 因此,這適用於JuliaCall
但不適XRJulia
也意味着問題出在data.frame
中XRJulia
的轉換中。
可能是XRJulia
當前缺乏在R中轉換data.frame
的能力。如果是這種情況,我可以想到兩種(理論上)解決問題的方法,第一種是將數據集直接讀取為julia
一個DataFrame
,另一個是在jlmerj
函數中將Dict
轉換為DataFrame
。 如果給出了示例數據集,我可以在數據集中嘗試解決方案。
順便說一句, MixedModels
作者與我談到了使用JuliaCall
基於MixedModels
構建R包的可能性,如果發生這種情況,我認為嘗試使用R的MixedModels
容易MixedModels
。
更新1:有關在XRJulia
為特定小型數據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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.