闪亮的帮助论坛似乎无法帮助我解决这个问题...
我有一个输出图形的特定包的命令。该命令需要通过在同一个包中定义的不同命令进行初步处理输入。因此,我的计划是创建一个应用程序,用户可以交互式更新地图。据我所知,这将需要2个动作按钮:“actionbutton A”将使用“checkboxGroupInput”的输入重新运行初步处理命令。然后,“actionbutton B”将使用初步处理命令中的新输入更新图形。
#ui.R
checkboxGroupInput("column_choices", "column choice", colnames(data), selected=c("column1", "column2"....)),
actionButton(inputId="choices", label="Update tag"))
actionButton(inputId="replot", label="Update plot")),
plotOutput("graph")
#server.R
servercell <- function(input, output) {
dataInput<-observeEvent(input$choices, {
isolate(tagData(IRIS[, input$column_choices]))
})
output$SPV<-renderPlot({
input$replot
isolate(package_defined_plot_function(data=data, dataTag=dataInput()))
})
}
按钮在彼此独立测试时起作用:单击“更新标记”/动作按钮A后,复选框输入似乎更新正常,单击“更新绘图”/动作按钮B后图形似乎正常工作(当dataInput( )不是绘图函数中的参数)。
我的问题是 dataInput&lt; -observeEvent(输入$ choices,{..... 不允许显示图表。当 dataInput()时绘图功能的参数 - 而不是显示在应用页面上的图形 - 代替我得到错误:找不到dataInput函数
正如我所说的,按钮A和B在彼此独立时工作正常.....但是它们的共存冲突......并且有两个动作按钮是我能想到以交互方式更新图形的唯一方法......如果有人能想到如何用一个很棒的按钮来做到这一点。
我被困了......任何提示?
答案 0 :(得分:1)
您无需实施两步更新流程。实际上,一旦某些复选框发生变化,您也可以立即重绘图表,除非您打算仅在需要时进行更新,例如:因为计算时间很长。
要实施更新按钮,请勿使用对isolate
和observeEvent
的调用;而是使用eventReactive
创建由按钮单击触发的反应式表达式。然后,您可以像在之前尝试的那样在绘图功能中使用它:
<强> ui.R 强>
checkboxGroupInput("column_choices", "column choice", colnames(data), selected=c("column1", "column2"....)),
actionButton(inputId="button", label="Update plot"),
plotOutput("graph")
<强> server.R 强>
shinyServer(function(input, output) {
dataInput <- eventReactive(input$button, {
tagData(IRIS[, input$column_choices])
})
output$graph <- renderPlot({
package_defined_plot_function(data=data, dataTag=dataInput()))
})
})
另请参阅RStudio article中的模式2 - 延迟反应。