R闪亮:使用pickerInput 1中的选定值更新pickerInput 2(pickerInputs相同),反之亦然

时间:2019-10-30 12:19:12

标签: r shiny

我是Stack Overflow的新手,这是我的第一个自我提出的问题。首先,向社区问好!

我有两个pickerInputs,它们都有完全相同的选择( mtcars 数据表中的汽车)。如果用户在第一个 pickerInput (替代项1)上手动选择汽车,则在第二个 pickerInput 中自动选择该特定汽车。此方向在服务器中的第一个 observeEvent 中处理。

但是这也将以另一种方式起作用,因此,如果用户在第二个 pickerInput (替代2)上手动挑选汽车,则第一个会被更新。此方向在第二个 observeEvent 中处理。

我现在的问题:我不能阻止只在一个方向上运行代码,因为R(分别是系统)不能在用户手动选择或自动选择之间产生区别其中。对于系统,它是相同的。因此,自动选择也被解释为手动选择,并且第一个或第二个 observeEvent (取决于用户实际做出选择的 pickerInput )始终在另一个选择之后运行。完全有道理,但这是不对的,不是吗?

如何防止这种行为始终在双向运行?我真的被困在这里,我不知道如何解决这个问题。由于系统将两者解释为手动操作,因此我无法总结如何使用例如 isolate req reativeValues (可能是针对计数器)来解决它,而我在互联网上找不到与我相同的闪亮问题。

为什么要首先这样做?

嗯,这只是与我遇到的实际问题类似的示例。我最初的问题来自 leaflet map pickerInput 之间的依赖关系,而且要复杂得多。用户能够在地图中选择一个多边形,从而导致应用程序中其他输出的更新。但是用户也可以使用 pickerInput 以“经典方式”选择区域。仅当用户悬停时,区域名称才会在地图上永久显示。因此,有一个 pickerInput 具有所有区域的可监视列表,并且还为不知道哪个多边形是哪个区域的用户提供。此外, pickerInput 中集成了一个搜索选项。

如果只是像示例中那样,我将接受它同时运行。但是在原始情况下,它会大大降低性能(不仅选择过程运行两次,而且还会更新输出),并可能导致错误。

如果您能帮助我解决这个问题,我将不胜感激。

谢谢!

这是示例代码:

用户界面

ui <- fluidPage(
  selectInput(
    inputId = "Alt1",
    label = "Alternative 1", 
    choices = rownames(mtcars),
    options = list(size = 15, title = "Choose a car (Alternative 1)")
  ),
  pickerInput(
    inputId = "Alt2",
    label = "Alternative 2", 
    choices = rownames(mtcars),
    options = list(size = 15, title = "Choose a car (Alternative 2)")
  )
)

服务器

server <- function(input, output, session) {
  observeEvent(input$Alt1, {
    updatePickerInput(session = session,
                      inputId = "Alt2",
                      selected = input$Alt1)
    print("You used Alternative 1")
  })
  observeEvent(input$Alt2, {
    updatePickerInput(session = session,
                      inputId = "Alt1",
                      selected = input$Alt2)
    print("You used Alternative 2")
  })
}

shinyApp(ui = ui, server = server)

0 个答案:

没有答案