2017-08-25 387 views
4

我試圖從倖存者包中使用ggsurvplot繪製Kaplan-Meyer曲線。當我傳遞保存在列表中的生存對象時,我無法繪製它。無法繪製使用ggsurvplot列表中的存活對象的kaplan-meier曲線

讓我以肺數據集爲例。一切工作如下:

library("survival") 
library("survminer") 
fit <- survfit(Surv(time, status) ~ sex, data = lung) 
ggsurvplot(fit, 
      conf.int = TRUE, 
      risk.table.col = "strata", 
      palette = c("#E7B800", "#2E9FDF"), 
      xlim = c(0, 600)) 

現在我生存在兩個變量,並保存模型結果列表。然後嘗試使用ggsurvplot進行KM繪圖。

vars <- c('sex', 'ph.ecog') 
l<- map (vars, ~survfit(Surv(time, status)~ get(.x),data = lung)) 
l<- set_names(l, vars) 
ggsurvplot(l$sex, 
      conf.int = TRUE, 
      risk.table.col = "strata", 
      palette = c("#E7B800", "#2E9FDF"), 
      xlim = c(0, 600)) 

我得到這樣的錯誤消息:

Error in eval(inp, data, env) : object '.x' not found 

是否有人知道爲什麼嗎?我該如何解決這個問題?非常感謝!

回答

0

首先需要加載所需的包裝或包裝。我想現在很多用戶都認爲運行R意味着每個人都被認爲具有反轉現象,但事實並非如此。

library(tidyverse) 
# run both your code segments, since you will need a small piece of first one 
str(l$sex) 
List of 14 
$ n  : int [1:2] 138 90 
$ time  : num [1:206] 11 12 13 15 26 30 31 53 54 59 ... 
$ n.risk : num [1:206] 138 135 134 132 131 130 129 128 126 125 ... 
$ n.event : num [1:206] 3 1 2 1 1 1 1 2 1 1 ... 
$ n.censor : num [1:206] 0 0 0 0 0 0 0 0 0 0 ... 
$ surv  : num [1:206] 0.978 0.971 0.957 0.949 0.942 ... 
$ type  : chr "right" 
$ strata : Named int [1:2] 119 87 
    ..- attr(*, "names")= chr [1:2] "get(.x)=1" "get(.x)=2" 
$ std.err : num [1:206] 0.0127 0.0147 0.0181 0.0197 0.0211 ... 
$ upper : num [1:206] 1 0.999 0.991 0.987 0.982 ... 
$ lower : num [1:206] 0.954 0.943 0.923 0.913 0.904 ... 
$ conf.type: chr "log" 
$ conf.int : num 0.95 
$ call  : language survfit(formula = Surv(time, status) ~ get(.x), data = lung) 
- attr(*, "class")= chr "survfit" 

所以,當你看到strata「名稱」 -attribute,它有一個get( -call它和出現嗆的ggsurvplot邏輯。使用attr<-將其替換爲更多信息(更少 - 「language-y」)。

attr(l[['sex']][['strata']], "names") <- c("sex=1", "sex=2") 

表達是在「呼叫」 -leaf一樣,所以你需要的東西更容易處理來代替它。我認爲這是很容易通過與由"call" leaf from the first fit`對象yoiu替換它做的事:

l$sex$call <- fit$call 
ggsurvplot(l$sex, 
      conf.int = TRUE, 
      risk.table.col = "strata", 
      palette = c("#E7B800", "#2E9FDF"), 
      xlim = c(0, 600)) 

enter image description here