eval(parse())中出错-r找不到参数输入
我对R非常陌生,这是我第一次遇到eval()函数。因此,我尝试使用以下包中的eval(parse())中出错-r找不到参数输入,r,debugging,eval,gbm,R,Debugging,Eval,Gbm,我对R非常陌生,这是我第一次遇到eval()函数。因此,我尝试使用以下包中的med和boot.med函数:。我用它来进行调解分析med和boot.med采用线性模型和数据帧等模型,这些模型指定了中介体和预测因子,然后估计每个中介体的中介效果 该软件包的作者提供了灵活的选项,可以指定自己的custom.function。从med的源代码可以看出,自定义.function被传递给eval()。因此,我尝试插入gbmt函数作为自定义函数。然而,R不断给我错误信息:在wrapup期间出错:必须提供用于预
med
和boot.med
函数:。我用它来进行调解分析med
和boot.med
采用线性模型和数据帧等模型,这些模型指定了中介体和预测因子,然后估计每个中介体的中介效果
该软件包的作者提供了灵活的选项,可以指定自己的custom.function
。从med
的源代码可以看出,自定义.function
被传递给eval()。因此,我尝试插入gbmt
函数作为自定义函数。然而,R不断给我错误信息:在wrapup期间出错:必须提供用于预测的树的数量。我已经在线搜索了几天,并尝试了多种方法指定树的数量参数n.trees
,但没有任何效果(我相信其他人也提出了类似的问题:,)
以下代码是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))
有人知道如何在上述代码的某个地方添加关于树数的参数吗
非常感谢
更新:要复制示例代码,请安装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)')
库(“mma”)
数据(“权重行为”)##二进制x#二进制y
x=重量_行为[,c(2,4:14)]
pred=重量和行为[3]
y=重量和行为[15]
data.bin是否在调用med
函数的作用域中定义了gbmt
?是否所有的dist
和start\u-stop
?有一个完整的、最少的例子来重现这个问题会有所帮助。(除此之外,在分析问题和发布相关信息方面做得很好。)事实上,我不认为您可以在自定义函数中使用自定义对象。
:med
不支持此功能,因为此函数的实现方式(顺便说一句,这很糟糕)。@Konrad Rudolphv:非常感谢您的及时回复gbmt
未在调用med
函数的作用域中定义。它是来自另一个R包的函数。但是,正如您从mma
软件包作者给出的示例代码中所看到的,glm
函数也是外部的,在med
函数中未定义,但是示例代码是有效的…glm
是“stats”软件包中的一个函数,它总是附加在一起。确保已加载并附加了gbm3
软件包。也就是说,请注意我的第二条评论:med
不支持在custom.function
中使用其他对象。事实上,仅仅通过阅读您发布的代码,就连其他包也找不到了。另外请注意,由于未能修复错误,该软件包最近已从CRAN中删除。@Konrad Rudolph:这非常有用!我认为mma
软件包的所有用户都应该收到您的信息。希望自定义.功能
在未来得到进一步发展。
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,
)')
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)')