首页 > 解决方案 > eval(parse()) 中的错误 - r 无法找到参数输入

问题描述

我对 R 很陌生,这是我第一次遇到 eval() 函数。所以我正在尝试使用以下包中的medand函数: mma。我正在使用它进行中介分析。并采用线性模型等模型,以及指定中介和预测因子的数据框,然后估计每个中介的中介效果。boot.medmedboot.med

包的作者提供了指定自己的灵活选项custom.function。从 的源码med可以看出,custom.function是传给了eval()。所以我尝试将该gbmt函数作为自定义函数插入。但是,R 一直给我错误信息:总结期间出错:必须提供要用于预测的树数。我已经在网上搜索了几天,并尝试了多种指定树参数数量的方法n.trees,但没有任何效果(我相信其他人也提出了类似的问题:post 1post 2)。

以下代码是med函数源代码的一部分:

cf1 = gsub("responseY", "y[,j]", custom.function[j])
cf1 = gsub("dataset123", "x2", cf1)
cf1 = gsub("weights123", "w", cf1)
full.model[[j]] <- eval(parse(text = cf1))

作者在包文档中给出的一个自定义函数示例如下:

temp1<-med(data=data.bin,n=2,custom.function = 'glm(responseY~.,data=dataset123,family="quasibinomial",
           weights=weights123)')

这里glm是自定义函数。此示例代码有效,您可以轻松复制它(如果您已mma安装并加载)。但是,当我尝试gbmt在生存对象上使用该函数时,出现错误,这是我的代码的样子:

temp1 <- med(data = data.surv,n=2,type = "link",
                    custom.function = 'gbmt(responseY ~.,
                                       data = dataset123, 
                                       distribution = dist,
                                       train_params = start_stop, 
                                       cv_folds=10, 
                                       keep_gbm_data = TRUE, 
                                       )') 

任何人都知道如何n.trees在上述代码中的某处添加关于树数的参数?

提前谢谢了!

更新:为了复制示例代码,请安装mma并尝试以下操作:

library("mma")

data("weight_behavior") ##binary x #binary y

x=weight_behavior[,c(2,4:14)] 
pred=weight_behavior[,3] 
y=weight_behavior[,15]

data.bin<-data.org(x,y,pred=pred,contmed=c(7:9,11:12),binmed=c(6,10), binref=c(1,1),catmed=5,catref=1,predref="M",alpha=0.4,alpha2=0.4) 

temp1<-med(data=data.bin,n=2) #or use self-defined final function

temp1<-med(data=data.bin,n=2, custom.function = 'glm(responseY~.,data=dataset123,family="quasibinomial",
weights=weights123)')

我将 custom.function 更改为gbmt并将生存对象用作 responseY 并发生错误。当我在gbmt函数外的数据上使用该函数时med,没有错误。

标签: rdebuggingevalgbm

解决方案


推荐阅读