【问题标题】:Clearing and re-reading variables in Shiny app在 Shiny 应用程序中清除和重新读取变量
【发布时间】:2018-08-30 09:22:37
【问题描述】:

我制作了一个应用程序,它接受用户输入的 googlesheet 并将其绘制成箱线图 https://sjgknight.shinyapps.io/boxplotr/https://github.com/uts-cic/BoxPlotR.shiny/

它大部分都在工作。输入不是反应式的,用户必须单击一个按钮才能阅读它们。但是(a)如果我在输入中有一个导致问题的默认“值”,并且(b)如果用户更改了他们的输入然后它给出了一个错误。

例如有了这个数据https://docs.google.com/spreadsheets/d/1ycTplwz5q21s1Z3QzpeoP5rMKlkJnQ12GBJJyIU2_q0/我应该能够创建一个“区域”箱线图,然后将输入更改为“收入”,再次单击“单击以加载数据”按钮,除非我刷新并清除网址。

使用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

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    你可以在你的服务器端试试这个:

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

    您创建了一个响应值,该值在清除输入后会发生变化。你的渲染函数必须对这个反应值做出反应(update$please)

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

    【讨论】:

    • hm,但我的理解是,使用 actionButton 您不需要进行递增。并不是我想清除输入(尽管这是一种方法),而是我希望它重新读取文本输入并根据这些输入重新渲染。我将更新我现在正在尝试的内容
    猜你喜欢
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多