Я хотел бы подавить предупреждение, которое часто возникает при анализе Кокса. Известно, что предупреждение «Loglik сходится до переменной 1; коэффициент может быть бесконечным» является сверхчувствительным, и у меня есть другие способы проверки результатов. Моей первой попыткой было обернуть coxph в вызывающий обработчик:
coxMW <- function(...){
withCallingHandlers(coxph(...),
warning=function(w) {
if (grepl("coefficient may be infinite", w$message))
invokeRestart("muffleWarning")
})
}
Это дает ожидаемые ответы
library(survival)
coxObj1 <- coxph(Surv(futime, fustat) ~ rx, data=ovarian)
coxObj2 <- coxMW(Surv(futime, fustat) ~ rx, data=ovarian)
summary(coxObj1)
summary(coxObj2))
Однако, когда я пытаюсь использовать результат в cox.zph:
zph1 <- cox.zph(coxObj1)
zph2 <- cox.zph(coxObj2)
Второй случай с использованием новой функции приводит к следующему: «Ошибка в is.data.frame (data): ..2 используется в неверном контексте, нет ... искать в»
Я сейчас изо всех сил пытаюсь найти способ подавить это конкретное предупреждение. Я много раз использую coxph внутри большой функции и не очень хочу заключать каждый вызов coxph в withCallingHandlers. Вся функция вызывается с помощью tryCatch с обработчиком ошибок, чтобы зарегистрировать ошибку et c. и перейдем к следующему делу, которое работает нормально. Однако, если я добавлю обработчик предупреждений в tryCatch, подавляя только это предупреждение, выход из функции, и я не могу понять, как продолжить с того места, где произошло предупреждение внутри функции. Я пробовал различные комбинации команд перезапуска в обработчике предупреждений, но я действительно не знаю, что делаю, и задаюсь вопросом, есть ли лучший подход? Любые предложения приветствуются!