我尝试使用R包JuliaConnectoR
来处理Julia包EvoTrees
,我知道如何将R中定义的数值参数传递给Julia(例如,一个double被转换为Float64),但我不知道如何在R中定义一个参数来描述Julia中的类型。
下面是一个例子:
n_obs = 100
n_features = 100
nrounds = 10L
set.seed(20221224)
x_train = matrix(ncol= n_features, rnorm(n_obs*n_features))
y_train = rnorm(n_obs)
library(JuliaConnectoR)
evoTrees = juliaImport("EvoTrees")
params_evo = evoTrees$EvoTreeRegressor(nrounds=nrounds , loss = as.symbol("linear"), alpha=0.5,lambda=0.0,gamma=0.0)
evoTrees_model = evoTrees$fit_evotree(params_evo, x_train, y_train, print_every_n = 50L)
对evoTrees$EvoTreeRegressor
的调用工作正常,例如,可以通过as.symbol("linear")
传递julia符号:linear
,并且传递像nrounds
这样的数字参数也很清楚。但是,我在调用fit evoTrees$fit_evotree
时得到了以下错误消息:
错误:Julia中的求值失败。原始Julia错误消息:方法错误:没有匹配fit_evotree(::进化树.进化树回归函数{进化树.线性,浮点数32},::矩阵{浮点数64},::向量{浮点数64}; print_every_n = 50)最接近的候选项是:fit_进化树(::联合{进化树.进化树分类器{L,T},进化树.进化树计数{L,T},进化树.进化树高斯{L,T},进化树.进化树MLE {L,T},进化树.进化树回归{L,T}}; x_train、y_train、w_train、偏移_train、x_eval、y_eval、w_eval、偏移_eval、度量、提前停止循环、打印每n、详细度、文件名、返回记录器),其中{L,T}位于C:\Users\rwarn.julia\packages\EvoTrees\ayRL8\src\fit.jl:309堆栈跟踪:[1] invokelest(::任意,::任意,::Vararg {任意}; kwargs::Base. Pairs {符号,Int64,元组{符号},命名元组{(:print_every_n,),元组{Int64}}})@Base.\essentials.jl:731 [2] evaluate!(调用::Main. R连接器.调用,通信器::Main. R连接器.通信器{套接字. TCPSocket})@Main. R连接器C:\用户\r警告\文档\r\win-l
我对此错误的解释如下:如果不通过Julia参数T
传递类型,则假定数据类型为Float32。然而,R类型double中的train数据被转换为Julia类型Float64。我认为,解决方案是将Julia类型Float64传递给evoTrees$EvoTreeRegressor
。我该如何做呢?谢谢!
信息:JuliaConnectoR:版本1.1.1进化树版本0.14.2
会话信息()R版本4.1.1(2021年8月10日)平台:x86_64-w64-mingw32/x64(64位)运行环境:Windows 10 x64(内部版本号22621)
基质产品:缺省
区域设置:[1] LC_COLLATE =德国_奥地利.1252 LC_类型=德国_奥地利.1252 LC_货币=德国_奥地利.1252 [4] LC_数值= C LC_时间=德国_奥地利.1252
随附基础 Package :[1]统计图形grDevices实用程序
数据集方法库
其他随附 Package :[1]朱莉娅连接R_1.1.1
通过名称空间加载(且未附加):[1]编译器_4.1.1标签_1.0.1工具_4.1.1
1条答案
按热度按时间ma8fv8wu1#
是的,你是对的,默认的类型是
Float32
,可以在下面的代码中看到。构造函数也接受关键字参数
T
来定义类型。如果你想传递Julia类型Float64
作为这个参数的值,你可以像下面这样做:JuliaConnectoR
的juliaExpr
函数允许在R的调用中使用任意Julia表达式。表达式在Julia中求值,结果值在此处使用。这对于函数的参数无法在R中正确表达的情况非常有用。另一种方法是使用
juliaEval
函数,在这种情况下,它将给予与juliaExpr
相同的输出,但是在进行函数调用之前,它将进行从Julia到R的往返。创建的
EvoTreeRegressor
对象现在使用JuliaFloat64
类型: