【发布时间】:2015-02-02 05:15:08
【问题描述】:
我有一个中档的多重估算数据集。我使用 with() 函数通过 coxph() 函数估计 m 个不同的数据集。 但是,我在自己的函数中使用 with() 函数时遇到了问题。
下面的代码是重现错误的简化示例:Surv(enter,exit,event) object 'enter' not found 中的错误
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
#这很好用
但是,当我在等式中包含 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
# Surv 中的错误(进入、退出、事件):找不到对象“进入”
【问题讨论】:
标签: r function with-statement cox-regression