R生存包中调用变量的问题

时间:2016-08-04 16:14:13

标签: r

我试图通过使用函数对几个基因进行生存分析。根据“高”(2)或“低”(1)基因表达对患者进行分组。

我对R如何理解我的代码感到困惑。以下是一些示例数据:

df <- read.table(header=T, text="TGM5    TGM6    TGM7    TPI1    survival    vital.status
2   1   1   2   1.419178082 2
2   1   1   1   5   1
2   1   1   2   1.082191781 2
1   1   1   1   0.038356164 1
2   1   2   2   0.77260274  2
1   1   2   2   2.336986301 1
2   1   2   1   1.271232877 1")

以下代码可以正常工作:

fit<- survfit(Surv(survival, vital.status)~TGM5), data =df)

我遇到的问题是我想为许多基因做这件事。我已经创建了一个我感兴趣的基因名称数组/列表:

> genes <- names(df[1:3])
> genes[1]
[1] "TGM5"

但如果我打电话

fit<- survfit(Surv(survival, vital.status)~genes[1]), data =df)

我收到错误

    Error in model.frame.default(formula = Surv(survival, vital.status) ~ (genes[1]),  : 
  variable lengths differ (found for 'genes[1]')

我认为当我直接调用TGM5与从基因列表中调用它作为元素的时候存在差异,并且解决方案非常简单。我对如何解决这个问题感到很茫然。 我尝试过使用gsub()但没有成功。

最后,由于我想将这些代码扩展到许多基因上,我想避免创建一个for循环,是否有一种矢量化方式可以解决这个问题?

非常感谢。

2 个答案:

答案 0 :(得分:1)

这个黑客有效:

survfit(as.formula(paste0("Surv(survival, vital.status)~",genes[1])), data =df)

Call: survfit(formula = as.formula(paste0("Surv(survival, vital.status)~", 
    genes[1])), data = df)

       n events median 0.95LCL 0.95UCL
TGM5=1 2      0     NA      NA      NA
TGM5=2 5      3   1.42    1.08      NA

我将公式粘贴在一起,然后将其强制转换为公式对象。有一个名为reformulate的更好的功能,通常可以为此工作,但我无法使用

Surv(survival, vital.status)

作为响应参数级别。

数据

df <- read.table(header=T, text="TGM5    TGM6    TGM7    TPI1    survival    vital.status
2   1   1   2   1.419178082 2
2   1   1   1   5   1
2   1   1   2   1.082191781 2
1   1   1   1   0.038356164 1
2   1   2   2   0.77260274  2
1   1   2   2   2.336986301 1
2   1   2   1   1.271232877 1")

答案 1 :(得分:0)

您需要删除引号:noquote(genes[1])