我有一个类mids的多次插补数据集。我使用with()函数使用coxph()函数估计 m 不同的数据集。 但是,我在自己的函数中使用with()函数时遇到了麻烦。
以下代码是重现错误的简化示例:Surv(输入,退出,事件)对象'输入'未找到错误
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&lt; - makeModel(“Surv(开始,停止,事件)”,“X1”,完成(数据))
#这很好用
但是,当我在等式中包含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&lt; - with.coxph(“Surv(开始,停止,事件)”,“X1”,数据)
#Surv中的错误(输入,退出,事件):对象'输入'未找到
答案 0 :(得分:0)
使用lm
函数时我遇到了类似的问题,我希望将formula
和/或data
参数传递给它。我正在做的就是绕过这个:
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
}
makeModelBad <- function(resp, explan, mData) {
mF <- formula(paste(resp, paste(explan, collapse = "+"), sep = "~"))
coxph(mF, data = mData)
}
library(survival)
example(coxph) # to load the data
(cp <- makeModel("Surv(start, stop, event)", "x", test2))
# Call:
# coxph(formula = Surv(start, stop, event) ~ x, data = test2)
#
#
# coef exp(coef) se(coef) z p
# x -0.0211 0.979 0.795 -0.0265 0.98
#
# Likelihood ratio test=0 on 1 df, p=0.979 n= 10, number of events= 7
cp.bad <- makeModelBad("Surv(start, stop, event)", "x", test2)
<强>解释强>
为了使用在函数内创建的模型,我必须明确地更改相应的插槽,因为在函数外部不知道mData
并且例如对update
的调用将失败:< / p>
update(cp, . ~ 1) # works
update(cp.bad, . ~ 1) # does not work
# Error in terms.formula(formula, special, data = data) :
# object 'mData' not found
对formula
广告位的更改,更有必要在对象的print
中显示公式。