我需要为几个变量运行cox回归模型,所以我想写一个循环来实现它。 但无论如何它都不起作用。 以下是我使用的代码
names(Gen)
varlist <- names(hsb2)[8:11] ## get the variables i want to involve in loop
models <- lapply(varlist, function(x) {
coxph(substitute(Surv(Time, Status) ~ i, list(i = as.name(x))), data = Gen, ties="efron")
})
我收到了错误信息
errors in terms.default(formula, special, data = data) :
no terms component nor attribute
任何人都知道如何解决这个问题或如何编写代码?
答案 0 :(得分:5)
因为模型以有趣的方式评估他们的公式,所以最好创建一个字符串并使用reformulate
将其转换为公式
Is there a better alternative than string manipulation to programmatically build formulas? 而不是substitute
。 (reformulate
通常更可取,因为它测试语法正确性的输入,但在这种情况下它会破坏响应变量。)
创建此临时功能:
tmpfun <- function(x) as.formula(paste("Surv(Time,Status)",x,sep="~"))
提供给lapply
的功能正文可能是:
coxph(tmpfun(x), data = Gen, ties="efron")
(你没有提供一个可重复的例子,但我认为这应该有用......)
对于额外(但完全没必要)的酷感,您可以尝试使用两个单独的lapply
调用替换整个lapply
调用,一个用于从变量名称列表中创建公式列表,另一个用于从公式列表中列出拟合模型。
formlist <- lapply(varlist,tmpfun)
models <- lapply(formlist,data=Gen,ties="efron")