我有一个包含100多种代谢物和一些协变量的数据集,比如年龄、性别、体重指数。现在,我想在for循环中使用coxph测试每个单独的代谢物和协变量。
我的问题是公式和我的懒惰。如何在公式中包含代谢物名称?get()有效,但只给出了表达式get(x)。当我只使用x时,我得到错误消息"Variable lengths differ"。
下面是一个示例代码:
x<-list(names(data))
coxfit<-coxph(Surv(age, fup_alter, hyper)~ get(x) +Age + SEX + BMI, data=data,)
temp <- cox.zph(coxfit, transform = 'log')
print(temp)结果是:
rho chisq p
get(x) -0.06279 6.22e-01 0.4302
SEX -0.07272 7.59e-01 0.3838
age -0.02007 6.01e-02 0.8064
BMI 0.01479 3.02e-02 0.8620 如果我这样做超过100次,我就无法区分结果文件中的get(x)。
我想要像"met1“或"met88”这样的名字,而不是get(x)。
发布于 2014-07-25 22:37:08
我想这可能会更干净,但它也差不多
#sample data
dd<-data.frame(
a=1:10,
b=rnorm(10),
c=runif(10),
y=rpois(10,5)
)
#get list of columns as proper "name" element
x <- lapply(names(dd)[-ncol(dd)], as.name)
#use bquote to inser names into formula
lapply(x, function(v) lm(bquote(y ~ .(v)), dd))在这里,我使用lm创建一个可运行的示例。它对任何使用公式的模型都应该起到相同的作用。你的电话看起来更像是
coxph(bquote(Surv(age, fup_alter, hyper)~ .(x) +Age + SEX + BMI), data=data,)其中bquote包围了整个公式,然后使用.(x)将"name“元素插入到公式中。在我的示例中,x是一个列表,所以我需要用lapply遍历它。
https://stackoverflow.com/questions/24954114
复制相似问题