更新图形所需的中间操作按钮 - 无响应

时间:2016-05-10 10:06:03

标签: shiny

闪亮的帮助论坛似乎无法帮助我解决这个问题...

我有一个输出图形的特定包的命令。该命令需要通过在同一个包中定义的不同命令进行初步处理输入。因此,我的计划是创建一个应用程序,用户可以交互式更新地图。据我所知,这将需要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在彼此独立时工作正常.....但是它们的共存冲突......并且有两个动作按钮是我能想到以交互方式更新图形的唯一方法......如果有人能想到如何用一个很棒的按钮来做到这一点。

我被困了......任何提示?

1 个答案:

答案 0 :(得分:1)

您无需实施两步更新流程。实际上,一旦某些复选框发生变化,您也可以立即重绘图表,除非您打算仅在需要时进行更新,例如:因为计算时间很长。

要实施更新按钮,请勿使用对isolateobserveEvent的调用;而是使用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 - 延迟反应