我有一个命名数据框列表:
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;
有没有办法将对象正确分配给生存函数?
谢谢!。
答案 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) )
}
我希望我能更好地解释为什么这个黑客有效。 (我只是根据错误消息和traceback()
- 结果来猜测原因。)我使用的事实是“缺失”对象的name
是“数据”。这可能是ggsurvplot
中的语义错误,你会对包的维护者有所帮助,向他发送一个链接到这个完整记录的例子。我想知道如果维护者更改了代码,那么可能会有改进,以便不会从$data
而是[[data]]
的环境访问列表成员名称。