禁用需要重新计算的闪亮图

时间:2018-11-08 18:44:30

标签: r shiny

所以这是我的问题:

  1. 我的闪亮应用程序具有多个图形和地图,并且使用简单的反应模型意味着每次更改复选框时都会重新计算图表-当用户可能想要更改多个选项时太慢了。
  2. 我已按照Stop reactions with isolate()
  3. 中的说明设置了隔离功能和“转到按钮”
  4. 我有不止一个“行”过滤器和图形-基本上,我有两组过滤器来更新其对应的图形。

问题:

  • 我想向用户显示图形在更改输入值时已“过时”,以便使用“ go”按钮提示它们重新计算。

我尝试过:

  • 在输入/选择更改上使用javascript处理程序,将.recalculating添加到绘图中。但是,当按下其中一个执行按钮时,它将仅重新计算与该按钮相关的图,但是会从所有图中删除.recalculating类(即使某些图尚未重新计算)。

解决方法是让“转到”按钮更新所有图,但这从资源的角度来看并不理想。

要复制,请使用下面的代码和:

  1. 单击两个按钮以生成图形。
  2. 更改两个过滤器(复选框和单选按钮),这两个图都将显示为需要重新计算。
  3. 只需按一个按钮即可重新生成图形。
  4. 请注意,当实际上只有一个改变时,两个图都会出现

这是一个有关如何组织我的闪亮应用程序的有效示例:

library('shiny')
library('ggplot2')

ui <- fluidPage(
  checkboxGroupInput(inputId = 'cyl', label = 'Cylinders:', choices = unique(mtcars$cyl), selected = unique(mtcars$cyl)),
  actionButton('goButton', 'Update graph!'),
  plotOutput('plot'),
  radioButtons(inputId = 'vs', label = 'V-shaped 09:', choices = unique(mtcars$vs), selected = 1),
  actionButton('goButton2', 'Update 2nd graph!'),
  plotOutput('plot2'),
  #change handlers
  tags$script(HTML("$(document).on('change', 'input, select', function(event) {
      $('.shiny-bound-output').addClass('recalculating')
                   })"))
)

server <- function(input, output) {
  #first data.frame - cyl
  df <- reactive({
    mtcars[mtcars$cyl %in% input$cyl,]
  })
  #second data frame - vs9
  df2 <- reactive({
    mtcars[mtcars$vs == input$vs,]
  })
  output$plot <- renderPlot({
    #only run if goButton pressed
    if (input$goButton == 0) 
      return()
    isolate({
      ggplot(df(), aes(x=hp, y=disp)) +
        geom_point()
    })
  })
  output$plot2 <- renderPlot({
    #only update if goButton2 pressed
    if(input$goButton2 == 0)
      return()
    isolate({
      ggplot(df2(), aes(x=hp, y=disp)) +
        geom_point()
    })
  })
}

shinyApp(ui, server)

0 个答案:

没有答案