我是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)