最近,当我运行在生存包中使用coxph的代码时
coxph(frml,data = data)
,我现在收到以下类型的警告消息
1:在model.matrix.default中(术语,mf,对比= contrast.arg): 部分参数匹配'对比'对比'对比.arg'
2:在seq.default(from = temp)中: '沿'的部分参数匹配到'沿着'"
我不确定为什么突然间这些部分参数匹配警告突然爆发,但我认为它们不会影响我。
但是,当我收到以下警告消息时,我想要coxph(frml,data = data) = NA
3:在钳工(X,Y,strats,偏移,初始化,控制,权重=权重,: Loglik在变量2之前收敛; beta可能是无限的。
6:在coxph(frml,data = data)中: X矩阵被认为是单数;变量1 3 4
当我没有使用此代码获取部分参数匹配警告时,我使用了tryCatch,如果嵌套的tryCatch收到警告或错误消息,则返回NA
coxphfit = tryCatch(tryCatch(coxph(frml,data = data), error=function(w) return(NA)), warning=function(w) return(NA))
但是,现在我得到了部分参数匹配警告,如果出现错误或者我收到上述警告消息3和4,我只需要返回NA。有关如何捕获这些特定警告消息并在这些情况下返回NA的任何想法吗?
答案 0 :(得分:1)
这实际上是一个有趣的问题,如果您正在寻找快速而肮脏的捕获警告的方法,您可以这样做:
withCallingHandlers({
warning("hello")
1 + 2
}, warning = function(w) {
w ->> w
}) -> res
在此示例中,在父环境中创建的对象 w
将是:
>> w
<simpleWarning in withCallingHandlers({ warning("hello") 1 + 2}, warning = function(w) { w <<- w}): hello>
然后你可以询问它:
grepl(x = w$message, pattern = "hello")
# [1] TRUE
作为
>> w$message
# [1] "hello"
对象res
将包含您想要的结果:
>> res
[1] 3
这不是超级整洁的方式,但我认为你总是可以引用对象 w
并检查警告消息是否包含您感兴趣的短语。