清除并重新阅读Shiny app

时间:2018-03-21 10:01:13

标签: r shiny

我创建了一个应用程序,用户输入googlesheet并将其显示为https://sjgknight.shinyapps.io/boxplotr/https://github.com/uts-cic/BoxPlotR.shiny/

它主要起作用。输入不是被动的,用户必须单击按钮才能读取它们。但是(a)如果我在输入中有一个导致问题的默认'值',并且(b)如果用户改变他们的输入然后它会给出错误。

E.g。使用此数据https://docs.google.com/spreadsheets/d/1ycTplwz5q21s1Z3QzpeoP5rMKlkJnQ12GBJJyIU2_q0/我应该能够创建一个“区域”箱图,然后将输入更改为“收入”,再次单击“单击以加载数据”按钮,除非我刷新,否则会出现错误清除URL。

使用http://shiny.rstudio.com/articles/action-buttons.html处的指导我知道我可以创建一个'清除'按钮,我猜测会删除所有值,但我不清楚我是如何重新读取输入的。我有一个isolate块,只是尝试将变量设置为NULL,但这不起作用。欢迎提出如何做到这一点的想法。看看其他问题,我主要看到基于传递给服务器的用户输入更新UI的问题。

所以,我想我需要使用observeEvent,但这似乎不起作用:

      observeEvent(
        input$gloadsheet, {
        isolate({
          gs_data <- gs_url(input$gsheetURL)

          data <- data.frame(gs_read(gs_data, ws = input$gsheetws))

          data$nID <- row.names(data)

          data <- reshape(data[c("nID",input$ggrouping,input$gdataID)], idvar = "nID", timevar = input$ggrouping, direction = "wide")

          data <- data[,-c(1:2)]
          data <- data.frame(data)

          data
        })
      }
    )

或者,我认为我可以根据此问题使用eventReactive Shiny Reactivity Explaination (using ObserveEvent)。可能是问题是此代码所基于的块(根据用户可以点击的多个选项获取变量的响应)。

        data <- eventReactive(input$gloadsheet, {

        isolate({

          gs_data <- gs_url(input$gsheetURL)
          data <- data.frame(gs_read(gs_data, ws = input$gsheetws))
          data$nID <- row.names(data)
          data <- reshape(data[c("nID",input$ggrouping,input$gdataID)], idvar = "nID", timevar = input$ggrouping, direction = "wide")
          data <- data[,-c(1:2)]
          data <- data.frame(data)
        })
        data
          })

      data

1 个答案:

答案 0 :(得分:0)

您可以在服务器端尝试此操作:

update <- reactiveValues(please = 0)
observeEvent(input$clearValues, {
        updateTextInput(...) # Clear everything #
        update$please <- update$please + 1
    })

inYourRenderingFunction <- render..({
       update$please
       .
       .
})

创建一个在清除输入后发生变化的无效值。您的渲染函数必须对此无效值做出反应(请更新$ please)

我已经在使用它了。希望对你有所帮助。