我有一个中间类的多重估算数据集。我使用 with() 函数通过 coxph() 函数估计m个不同的数据集。但是,我在自己的函数中使用 with() 函数时遇到了问题。
下面的代码是重现错误的简化示例:未找到 Surv(enter,exit,event) object 'enter' 中的错误
list<-"X1+X2"
var.used<-formula(paste("Surv(enter,exit,event)~",list,sep=""))
with.coxph<-function(form,dataset){
with(dataset,coxph(form))
}
with.coxph(var.used,data)
当我简单地自行运行该功能时:
with(dataset, coxph(Surv(enter,exit,event)~X1+X2))
它工作正常。
我认为问题与调用 with() 的环境有关。我在这里找到了不同的帖子,但我似乎无法让它工作。我尝试将数据集和公式分配给全局环境:
with.coxph2<-function(form,dataset){
assign(".dataset",dataset,envir=.GlobalEnv)
assign(".form",dataset,envir=.GlobalEnv)
with(dataset,coxph(form))
remove(".dataset",dataset,envir=.GlobalEnv)
remove(".form",dataset,envir=.GlobalEnv)
}
with.coxph2(var.used,data)
但这产生了同样的错误。
编辑
我已尝试按如下所述解决问题。当我只是在没有 with() 语句的情况下运行该函数时,它可以完美运行。
makeModel<-function(resp, explan, mData) {
mF <- formula(paste(resp, paste(explan, collapse = "+"), sep = "~"))
mod <- coxph(mF, data = mData)
mod$call$formula <- mF
mod$call$data <- as.symbol(deparse(substitute(mData)))
mod
}
cp <- makeModel("Surv(start, stop, event)", "X1", complete(data))
# 这很好用
但是,当我在等式中包含 with() 语句时,我仍然会遇到同样的错误:
with.coxph<-function(resp, explan, mData) {
mF <- formula(paste(resp, paste(explan, collapse = "+"), sep = "~"))
mod <- with(mData,coxph(mF))
mod$call$formula <- mF
mod$call$data <- as.symbol(deparse(substitute(mData)))
mod
}
cp <- with.coxph("Surv(start, stop, event)", "X1", data)
# Surv 中的错误(进入,退出,事件):找不到对象“进入”