闪亮错误:对象' data_survival_curve'未找到

时间:2018-03-18 21:55:06

标签: r shiny

我无法弄清楚以下代码有什么问题。运行runApp('script.R')后,我收到以下错误Error: object 'data_survival_curve' not found。我在RStudio中运行调试,并在第60行上创建了这个变量,它一直存在,直到出现错误。

script.R文件:

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

data <- read.csv('dataset.csv', header = TRUE, sep = ",", fileEncoding="UTF-8")
unique_transplant_years_decreasing <- as.numeric(sort(unique(c(data$transplant_year)), decreasing = TRUE))

krivkaPreziti <- sidebarLayout(
  # all inputs for graph survival analysis (krivka preziti)
  sidebarPanel(
    sliderInput("krivka_preziti_input_years", 'Years:', 
                min = unique_transplant_years_decreasing[length(unique_transplant_years_decreasing)],
                max = unique_transplant_years_decreasing[1],
                value = c(unique_transplant_years_decreasing[length(unique_transplant_years_decreasing)],
                          unique_transplant_years_decreasing[1]),
                step = 1),
    numericInput('krivka_preziti_input_seskupit_po', 'Group by (years):',
                 value = 0,
                 min = 0),
    checkboxInput('krivka_preziti_input_facet', 'Facet', value = FALSE),
    width = 3
  ),

  # Create a spot for bar plot
  mainPanel(
    h2('Survival curve'),
    br(),
    plotOutput('krivka_preziti', height = "750px"),
    width = 12
  )
)



panelAnalyzaPreziti <- tabPanel(
  'Survival analysis',
  krivkaPreziti 
)


ui <- navbarPage(
  title = "Application",
  panelAnalyzaPreziti
)


server <- shinyServer(
  function(input, output, session)
  {
    output$krivka_preziti <- renderPlot(
      {
        krivka_year_bottom <- input$krivka_preziti_input_years[1]
        krivka_year_top <- input$krivka_preziti_input_years[2]
        krivka_seskupit_po <- input$krivka_preziti_input_seskupit_po

        # data which fit the range of selected years
        # data which meet the condition that survival_time is not NA
        data_survival_curve <- data[data$transplant_year %in% seq(krivka_year_bottom, krivka_year_top) &
                                      !is.na(data$survival_time) &
                                      data$survival_time >= 0,]


        # if seskupit_po != 0, then cut 
        if(krivka_seskupit_po != 0) {
          data_survival_curve$time_period <- cut(as.numeric(data_survival_curve$transplant_year),
                                                   seq(krivka_year_bottom, krivka_year_top, krivka_seskupit_po),
                                                   include.lowest = T)
          data_survival_curve <- data_survival_curve[!is.na(data_survival_curve$time_period),]
          data_survival_curve$time_period <- as.factor(data_survival_curve$time_period)
        }
        else {
          data_survival_curve$time_period = data_survival_curve$transplant_year
        }

        # validate number of rows of data set > 0
        shiny::validate(
          need(nrow(data_survival_curve) > 0, 'Broader your input')
        )

        surv_obj <- Surv(data_survival_curve$survival_time/365,data_survival_curve$patient_died)
        fit <- survfit(surv_obj ~ time_period, data = data_survival_curve)

        krivka_preziti_plt <- ggsurvplot(fit,
                                         linetype = c('solid'),
                                         ggtheme = theme_bw(),
                                         surv.scale = 'percent',
                                         xlab = 'Years',
                                         ylab = '%',
                                         censor = FALSE,
                                         break.x.by = 1,
                                         break.y.by = 0.1)
        plot2 <- krivka_preziti_plt + geom_dl(aes(label = time_period), method = list("last.points"), cex = 0.8)

        plot2

      }
    )
  }
)

shinyApp(
  ui = ui,
  server = server
)

以下是我使用的数据集:enter link description here

1 个答案:

答案 0 :(得分:1)

从将近一个小时以来,我一直在同一个问题上苦苦挣扎,终于找到了解决方案!

“ ggsurvplot”功能发生了变化,您现在需要指定“ fit”元素中使用的数据集。因此,您必须在代码中添加:

krivka_preziti_plt <- ggsurvplot(fit, data = data_survival_curve,
                                         linetype = c('solid'),
                                         ggtheme = theme_bw(),
                                         surv.scale = 'percent',
                                         xlab = 'Years',
                                         ylab = '%',
                                         censor = FALSE,
                                         break.x.by = 1,
                                         break.y.by = 0.1)

来源:Github Issue, 13th of January 2018