在renderPlot中找不到R Shiny Object

时间:2018-04-27 07:27:14

标签: r shiny

我在renderPlot(shiny)函数中定义了“时间”。但是,我得到了一个

  

错误:找不到对象“时间”。

我想知道为什么我会像我这样得到这个错误 已为“时间”变量

定义
library(shiny)
library(survival)
library(survminer)
library(ggplot2)

ui <- fluidPage(
   sidebarLayout(
      sidebarPanel(
         fileInput("file","File input"),

         selectInput("Survival",
                     label = "Survival",
                     choices =  c('time.day',
                                  'time.year'),
                     selected = 'time.day'),
         selectInput("Treatment",
                     "Treatment",
                     choices = c("trt"),
                     selected = "trt")
      ),
      mainPanel(
        plotOutput("KM")
       )
   )
)

server <- function(input, output) {
    output$KM <- renderPlot({  
      req(input$file)
      df <- read.csv(input$file$datapath)
      df<- data.frame(df)
    Time <- switch(input$Survival, 
                  "time.day" = df$time.day,
                  "time.year" = df$time.yr)
    x <- switch(input$Treatment,
                    "trt" = df$trt)

    fit <- survfit(Surv(Time , cen) ~ x , data = df)
    ggsurvplot(fit,risk.table = TRUE)
      }
   )  
}

shinyApp(ui = ui, server = server)

输入数据通常是csv文件,如:

 time.yr       time.day     cen  trt
1.181940686 431.7038355 0   1
3.174982816 1159.662473 1   1

1 个答案:

答案 0 :(得分:0)

这结果是一个棘手的问题。通常我们会建议一些非标准的评估来创建fit,但似乎ggsurvplot很挑剔,而且更容易创建所需的确切数据框:

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

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput("file","File input"),

      selectInput("Survival",
                  label = "Survival",
                  choices =  c('time.day',
                               'time.year'),
                  selected = 'time.day'),

      selectInput("Treatment",
                  "Treatment",
                  choices = c("trt"),
                  selected = "trt")
    ),
    mainPanel(
      plotOutput("KM")
    )
  )
)

server <- function(input, output) {

  raw_surv_data <- reactive({
    req(input$file)
    read.csv(input$file$datapath)
  })

  surv_data <- reactive({
    raw_surv <- raw_surv_data()
    data.frame(
      Time = raw_surv[[input$Survival]],
      x    = raw_surv[[input$Treatment]],
      cen  = raw_surv[['cen']]
    )
  })

  surv_fit <- reactive({
    survfit(Surv(Time , cen) ~ x , data = surv_data())
  })

  output$KM <- renderPlot({  
    ggsurvplot(surv_fit(), risk.table = TRUE, data = surv_data())
  })  
}

shinyApp(ui = ui, server = server)

enter image description here