私は、クラス mids の乗算帰属データセットを持っています。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 <- 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 <- with.coxph("Surv(開始、停止、イベント)"、"X1"、データ)
# Surv(enter,exit,event) のエラー: オブジェクト 'enter' が見つかりません