【问题标题】:R - apply survfit to a list and plot with corresponding namesR - 将 survfit 应用于列表并使用相应名称进行绘图
【发布时间】:2018-05-12 09:26:54
【问题描述】:

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

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)

我想在每个数据帧上运行一个 survfit,然后生成几个图(为了简单起见,我在这里只放了一个),每个图都有相应的标题。我认为 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)

但这个想法没有奏效:
“eval 中的错误(fit$call$data):找不到对象‘survivaldata’”
有没有办法将对象正确分配给生存功能? 谢谢!。

【问题讨论】:

    标签: r list plot apply survival-analysis


    【解决方案1】:

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

    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) )
    }
    

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

    【讨论】:

    • 当您从全局环境中删除“surv.days”对象时,这将停止工作。 (我应该在原始示例中做的事情),所以我通过添加 rm(survdata, censor, surv.days) 编辑了原始帖子
    • 我认为这是 ggsurvplot 函数未能正确提取和处理 survfit 对象内部结构的进一步证据。维护者应该受到质疑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多