R,如何将数据框的所有列名称放入公式中?

问题描述

我正尝试在this tutorial之后将git log --find-object=blobid -- Readme.md 中的多元Cox回归分析应用于我的数据集。 特别是,我尝试应用以下功能R

coxph()

如您所见,在这种情况下,特征(install.packages(c("survival","survminer")); library("survival"); library("survminer"); data("lung"); res.cox <- coxph(Surv(time,status) ~ age + sex + ph.ecog,data = lung) summary(res.cox) )的名称已手动插入到公式中。

在我的情况下,我拥有成千上万的功能,因此无法手动添加名称。我需要找到一种自动插入它们的方法。 我尝试对前一个案例进行操作,但没有成功。 这是我尝试过的:

age + sex + ph.ecog

我收到此错误消息:

featureNames <- paste(colnames(lung),collapse = " + ")
res.cox <- coxph(Surv(time,status) ~ featureNames,data =  lung)

有人可以帮助我吗?谢谢! 我在运行Linux Ubuntu 18.04.5 LTS /

的PC上使用Error in model.frame.default(formula = Surv(time,: variable lengths differ (found for 'featureNames') 版本3.6.3

解决方法

使用重新格式化,首先设置一个默认公式:

fS <- Surv(time,status) ~ . 

假设您事先了解这些功能:

colnames(lung)
 [1] "inst"      "time"      "status"    "age"       "sex"       "ph.ecog"  
 [7] "ph.karno"  "pat.karno" "meal.cal"  "wt.loss"  

features = c("ph.karno","age","meal.cal","wt.loss")

fs = reformulate(features,fS[[2]])

coxph(fs,data =  lung)

Call:
coxph(formula = fs,data = lung)

               coef  exp(coef)   se(coef)      z     p
ph.karno -9.152e-03  9.909e-01  7.327e-03 -1.249 0.212
age       1.629e-02  1.016e+00  1.168e-02  1.395 0.163
meal.cal  5.087e-06  1.000e+00  2.391e-04  0.021 0.983
wt.loss  -1.057e-03  9.989e-01  6.884e-03 -0.154 0.878

Likelihood ratio test=5.84  on 4 df,p=0.2113
n= 171,number of events= 124 
   (57 observations deleted due to missingness)
,

使用parse()eval()可以解决问题。

featureNames <- paste(colnames(lung),collapse = " + ")
res.cox <- coxph(Surv(time,status) ~ eval(parse(text = featureNames)),data =  lung)