首页 > 解决方案 > ggsurvplot 在 Rshiny 中不起作用

问题描述

我正在尝试在 Rshiny 中使用 ggsurvplot。但我无法得到情节。

安装库

library(shiny)
library(survival)
library(survminer)

定义的输入和输出

ui<-navbarPage("kaplan Meier",
               sidebarLayout(sidebarPanel(fileInput("file","Upload your csv",multiple=FALSE),
                                          tags$hr(),
                                          h5(helpText("Select the read.table parameters below")),
                                          checkboxInput(inputId = 'header', label = 'Header', value = FALSE),
                                          checkboxInput(inputId = "stringAsFactors", "stringAsFactors", FALSE),
                                          radioButtons(inputId = 'sep', label = 'Separator', 
                                                       choices = c(Comma=',',Semicolon=';',Tab='\t', Space=''), selected = ','),
                                          textInput("subdef","Define subset",value = "TRUE"),
                                          uiOutput("var5"),
                                          uiOutput("var6"),
                                          uiOutput("var9"),
                                          uiOutput("var7"),
                                          uiOutput("var8"),

检查km模型是否分层

checkboxInput(inputId="str",label="stratified KM estimates",value=FALSE),
actionButton("click","Submit")
                   ),
        mainPanel(helpText("KaplanMeier estimates"),
                             helpText("Survival Plot"),
                             plotOutput("survplot"))
                   )
    )

服务器从这里开始

server<-function(input,output){
  data <- reactive({
    file1 <- input$file
    if(is.null(file1)){return()} 
    file1<-read.table(file=file1$datapath, sep=input$sep, header = input$header, stringsAsFactors = input$stringAsFactors)
    return(file1)
  })
  f<-reactive({
    subset(data(),eval(parse(text=input$subdef)))
  })

输入函数的变量

output$var5<-renderUI({
    selectInput("time","Select time variable",choices=as.list(names(f())),multiple=F)
  })
  output$var6<-renderUI({
    selectInput("cnsr","select censoring variable",choices=as.list(names(f())),multiple=F)
  })
  output$var9<-renderUI({
    selectInput("cnsrvalue","select event value",choices=unique(f()[,input$cnsr]),multiple=F)
  })
  output$var7<-renderUI({
    selectInput("group","select Treatment Group",choices=as.list(names(f())),multiple=F)
  })
  output$var8<-renderUI({
    selectInput("strata","select strata variable",choices=as.list(names(f())),multiple=F)
  })

使用 survfit 的卡普兰迈尔

kmsurvival<-eventReactive(input$click,{
    subdata<-f()
    if(input$str==FALSE){
      survfit(Surv(subdata[,input$time],subdata[,input$cnsr]==input$cnsrvalue)~subdata[,input$group],data=subdata,type="kaplan-meier")
    }
    else if(input$str==TRUE){
      survfit(Surv(subdata[,input$time],subdata[,input$cnsr]==input$cnsrvalue)~subdata[,input$group]+strata(subdata[,input$strata]),data=subdata,type="kaplan-meier")
    }
  })

renderPlot 中的 ggsurplot 函数

output$survplot<-renderPlot({
    ggsurvplot(kmsurvival(),pval=F, conf.int=F,risk.table=T,risk.table.col=input$group,linetype = input$group)
  })
}
shinyApp(ui=ui,server=server)

标签: r

解决方案


推荐阅读