R - 将幸存者应用于列表并使用相应的名称绘制

时间:2017-11-28 19:48:59

标签: r list plot apply survival-analysis

我有一个命名数据框列表:

library(survival)
library(survminer)

surv.days<- runif(n = 50, min = 0, max = 500)
censor<- sample(c(0,1), 50, replace=TRUE)
survdata<- data.frame(surv.days, censor)
survlist<- list(survdata, survdata)
names(survlist)<- c("name1", "name2")
rm(survdata, censor, surv.days)

我想在每个数据帧上运行一个幸存者,然后生成几个图(为了简单起见,我在这里只放了一个),每个图都有相应的标题。我认为Map就是这样做的,所以:

titles<- names(survlist)

然后我定义了我想用来运行生存分析和绘图的函数:

survival.function<- function(survivaldata, datanames){
  sfit<- survfit(Surv(surv.days, censor)~1, data=survivaldata)
  ggsurvplot(sfit, conf.int=TRUE, risk.table=TRUE,
             surv.median.line = "v",
             title=datanames,
             risk.table.height=.25)
}

尝试应用它:

Map(survival.function, survlist, titles)

但这个想法并不奏效:
&#34; eval错误(适合$ call $ data):object&#39; survivaldata&#39;找不到&#34;
有没有办法将对象正确分配给生存函数? 谢谢!。

1 个答案:

答案 0 :(得分:0)

在这种情况下,错误信息似乎具有误导性,至少在我的阅读中如此。它似乎指向survfit调用中的错误,实际上它是ggsurvplot内的错误,可以从traceback()的输出中看出。我首先尝试更改传递给survival.function的对象的名称。然后没有错误。但也没有情节。因此,还在print内添加了survival.function来电。我将附上结果中的第一个图。

survival.function<- function(data, datanames){
  sfit<- survfit(Surv(surv.days, censor)~1, data=data)
  print( ggsurvplot(sfit, conf.int=TRUE, risk.table=TRUE,
             surv.median.line = "v",
             title=datanames,
             risk.table.height=.25) )
}

enter image description here

我希望我能更好地解释为什么这个黑客有效。 (我只是根据错误消息和traceback() - 结果来猜测原因。)我使用的事实是“缺失”对象的name是“数据”。这可能是ggsurvplot中的语义错误,你会对包的维护者有所帮助,向他发送一个链接到这个完整记录的例子。我想知道如果维护者更改了代码,那么可能会有改进,以便不会从$data而是[[data]]的环境访问列表成员名称。