我创建了一个应用程序,用户输入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
答案 0 :(得分:0)
您可以在服务器端尝试此操作:
update <- reactiveValues(please = 0)
observeEvent(input$clearValues, {
updateTextInput(...) # Clear everything #
update$please <- update$please + 1
})
inYourRenderingFunction <- render..({
update$please
.
.
})
创建一个在清除输入后发生变化的无效值。您的渲染函数必须对此无效值做出反应(请更新$ please)
我已经在使用它了。希望对你有所帮助。