【发布时间】:2019-07-31 13:16:52
【问题描述】:
我正在尝试将 purrr::safely 与 coxph 一起使用,以便捕获错误消息。我制作了一个安全版本的 coxph,如下所示
library(survival)
library(purrr)
coxph_safe <- safely(coxph)
当我的唯一输入是公式和数据时,这非常有效,但是,如果我添加另一个输入,例如子集或权重,我会收到以下错误消息:
simpleError in eval(substitute(subset), data, env): ..3 在不正确的上下文中使用,没有 ... 可以查看
有谁知道在需要额外输入时如何安全地申请 coxph?我也得到同样的错误,使用安静而不是安全,如果我制作一个安全版本的 lm 并指定一个子集。我正在使用 R 3.6.1 和 purrr 0.3.2。目前,我编写了一个解决方法,在应用 coxph_safe 之前对数据进行子集化,但如果有更好的解决方案,我会很高兴。
这是一个简单的例子:
test1 <- list(time=c(4,3,1,1,2,2,3),
status=c(1,1,1,0,1,1,0),
x=c(0,2,1,1,1,0,0),
sex=c(0,0,0,0,1,1,1))
# Without subset
coxph(Surv(time, status) ~ x, test1) # Works as expected
coxph_safe(Surv(time, status) ~ x, test1) # Works as expected
# With subset
coxph(Surv(time, status) ~ x, test1, subset = !sex) # Works as expected
coxph_safe(Surv(time, status) ~ x, test1, subset = !sex) # Error!
编辑
在相关说明中,我在将 anova 应用于通过 coxph_safe 生成的 coxph 对象时也遇到了类似的错误。
cox_1 <- coxph(Surv(time, status) ~ x, test1) # Works as expected
anova(cox_1) # Works as expected
cox_1s <- coxph_safe(Surv(time, status) ~ x, test1) # Works as expected
anova(cox_1s$result) # Error in is.data.frame(data) : ..2 used in an incorrect context, no ... to look in
据我所知,这与呼叫的存储方式有关。我可以通过覆盖调用来修复它。
cox_1$call # coxph(formula = Surv(time, status) ~ x, data = test1)
cox_1s$result$call # .f(formula = ..1, data = ..2)
cox_1s$result$call <- cox_1$call
anova(cox_1s$result) # Now works as expected
有没有更好的方法解决这个问题?
【问题讨论】: