2017-11-28 7 views
0

ich eine Liste mit dem Namen Datenrahmen haben:R - gelten survfit auf eine Liste und Grundstück mit entsprechenden Namen

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) 

Ich möchte ein survfit auf jedem Datenrahmen laufen und dann mehrere Plots erzeugen (Ich habe hier nur eine der Einfachheit halber), jede Handlung mit dem entsprechenden Titel. Ich denke Karte ist der Weg, es zu tun, so:

titles<- names(survlist) 

Dann definiere ich die Funktion, die ich verwenden möchte, um das Überleben Analyse und Plots laufen:

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

Und versuchen Sie es anwenden:

Map(survival.function, survlist, titles) 

Aber die Idee hat nicht funktioniert:
"Fehler in eval (fit $ data $ call): Objekt 'survivaldata' nicht gefunden"
Gibt es eine Möglichkeit, die Objekte den Überlebensfunktionen richtig zuzuordnen? Vielen Dank!

Antwort

0

In diesem Fall scheint die Fehlermeldung irreführend, zumindest zu meiner Lektüre. Es scheint auf den Fehler zu verweisen, der in dem Anruf zu survfit ist, wenn es tatsächlich ein Fehler innerhalb ggsurvplot ist, wie aus der Ausgabe von traceback() ersichtlich ist. Ich habe zuerst versucht, den Namen des Objekts zu ändern, das an übergeben wird. Dann kein Fehler. Aber auch keine Handlung. Also auch eine print Anruf innerhalb survival.function hinzugefügt. Ich werde den ersten der beiden resultierenden Plots anhängen.

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

Ich wünschte, ich besser, warum dieser Hack funktioniert erklären könnte. (Ich vermute nur die Ursache auf der Basis der Fehlermeldung und traceback() -Ergebnisse.) Ich verwende die Tatsache, dass die name des "fehlenden" Objekts "Daten" war. Es ist möglich, dass dies ein semantischer Fehler in der ggsurvplot ist und Sie dem Paketbetreuer einen Gefallen tun würden, um ihm einen Link zu diesem vollständig dokumentierten Beispiel zu schicken. Ich frage mich, ob es eine mögliche Verbesserung geben könnte, wenn der Betreuer den Code so ändern würde, dass auf den Namen des Listenmembers nicht mit $data sondern [[data]] von der Umgebung zugegriffen wird.

+0

Dies funktioniert nicht mehr, wenn Sie das Objekt "surv.days" aus dem globalen env entfernen. (etwas, das ich im ursprünglichen Beispiel hätte tun sollen), also habe ich den ursprünglichen Beitrag editiert, indem ich 'rm (survdata, censor, surv.days)' –

+0

hinzugefügt habe. Ich sehe das als weiteren Beweis, dass die ggsurvplot-Funktion nicht richtig extrahiert werden kann und behandeln die Interna eines Überlebensobjekts. Der Betreuer sollte befragt werden. –