在定义的函数中缺少函数(x)

时间:2016-02-22 13:28:30

标签: r function sapply

我理解以下

aa <- sapply(c("BMI","KOL"),function(x) as.formula(paste('Surv(BL_AGE,CVD_AGE,INCIDENT_CVD) ~', paste(colnames(s)[c(21,259,330,380)], collapse='+'))))

我失踪了x 但我真的不明白如何以及在何处插入它是正确的。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

由于文字数量的原因,将此作为答案而不是评论。

如果我理解正确的话,你会尝试迭代一个变量列表,你想要将它们(依次)添加到生存模型中的一组独立变量中。您提供的代码中的问题是您没有给x一个地方。有几种方法可以做到这一点。

第一个与您正在做的非常相似,并创建公式。我使用癌症来证明这一点&#39;数据集:

library(survival)
data(cancer)

myvars <- c("meal.cal","wt.loss")

a1 <- sapply(myvars,function(x){
  as.formula(sprintf("Surv(time, status)~age+sex+%s",x))
}
)
#then we can fit our models
lapply(a1,function(x){coxph(formula=x,data=cancer)})

在我看来,这有点令人费解,可以一步完成:

models <- lapply(myvars, function(x){
  form <- as.formula(sprintf("Surv(time, status)~age+sex+%s",x))
  fit <- coxph(formula=form, data=cancer)
  return(fit)
})

使用您开始使用的代码,我们只需添加&#39; x&#39;到因变量的向量。但是,这不是非常易读的代码,我总是有点担心将列索引提供给模型。使用变量名称可能更安全。

aa <- sapply(c("BMI","KOL"),function(x) as.formula(paste('Surv(BL_AGE,CVD_AGE,INCIDENT_CVD) ~', paste(c(x,colnames(s)[c(21,259,330,380)]), collapse='+'))))