根据在其他选项卡上选择的新数据刷新闪亮应用上的选项卡

时间:2018-05-30 13:34:52

标签: r shiny

我有一个闪亮的应用程序,有几个选项卡。

在第一个标签中,我从样本数据集中选择数据,并将其作为CSV文件保存到服务器。

在第二个标签中,我读取了CSV文件并进行了绘制。

我的问题: 当我回到第一个选项卡并更改数据并保存时,即使单击第二个选项卡名称,第二个选项卡中的图也不会刷新。

我不想刷新整个应用程序,因为它是一个很大的应用程序,加载是一个问题。

我还希望仅通过选择选项卡自动刷新选项卡。

感谢您的帮助。

这是一个简单的例子:

library(shiny)
dataDir <- "data"
load(file =file.path(dataDir, "dt_clean.RData"))
#dt_clean will load dt.clean object which has all the data, you can use any other data of your own to test the app

ui <- fluidPage(
  mainPanel(
    tabsetPanel(
      tabPanel("tab1",
               column(4,
                      selectInput(inputId = "months",
                                  label = "Date:",
                                  choices = c("Jan", "Feb", "Mar"),
                                  selected = "Jan")
               ),
               column(4,
                      radioButtons(inputId = "TS_which", label = "Which kind of data?", 
                                   choices = list("All months" = 1, "One month" = 2), 
                                   selected = 2)
               ),
               column(4,
                      actionButton(inputId = "savedTS", label = "Save time series data")
               )
      ),
      tabPanel("tab2",
               plotOutput("ts_plot_lof")
      )
    )
  )
)

server <- function(input, output, session) {

  saveData <- function(dtTS) {

    #save csv and RData file for TS
    if(input$TS_which == 2){
      ptt <- input$months
      in.dt <- which(dtTS$dt == ptt)
      dt.clean.date <- dtTS[in.dt,]
    }else{
      dt.clean.date <- dtTS
    }

    fileName <- "ts_data.csv"
    # Write the file to the local system
    write.csv(
      x = dt.clean.date,
      file = paste0("responses/", fileName), 
      row.names = FALSE, quote = FALSE
    )
  }

  loadData <- function() {
      file.n <- paste0("responses/", "ts_data.csv")
      dt_ts <- read.csv(file.n, stringsAsFactors = FALSE) 
      dt_ts
  }

  observeEvent(input$savedTS, {
    dt.ts <- TSdata()
    saveData(dt.ts)
  })

  TSdata <- reactive({
    if(input$TS_which == 2){
      ptt <- input$months
      in.dt <- which(dt.clean$dt == ptt)
      dt.clean.date <- dt.clean[in.dt,]
    }else{
      dt.clean.date <- dt.clean
    }
    return(dt.clean.date)
  })

  output$ts_plot_lof <- renderPlot({
    plot(loadData())
  })
}

shinyApp(ui, server)

0 个答案:

没有答案