R Shiny: Обновление pickerInput 2 с выбранным значением в pickerInput 1 (pickerInputs идентичны) И наоборот - PullRequest
0 голосов
/ 30 октября 2019

Я новичок в Stack Overflow, это мой самый первый добровольный вопрос здесь. Итак, во-первых, привет сообществу!

У меня есть два pickerInputs, которые оба имеют одинаковый выбор (автомобили с датой mtcars ). Если пользователь вручную выбирает автомобиль на первом pickerInput (Альтернатива 1), этот конкретный автомобиль выбирается автоматически во втором pickerInput . Это направление обрабатывается в первом наблюдаемом событии на сервере.

Но это должно работать и наоборот, поэтому, если пользователь вручную выбирает автомобиль на втором pickerInput (вариант 2), первый обновляется. Это направление обрабатывается во втором наблюдаем событие .

Моя проблема сейчас: я не могу предотвратить запуск кода только в одном направлении, потому что R (соответственно система) не может сделатьразница между выбором была сделана вручную пользователем или автоматически сделана в результате этого. Для системы это то же самое. Таким образом, автоматический выбор также интерпретируется как ручной выбор, и первый или второй наблюдающий событие (в зависимости от того, какой pickerInput пользователь фактически сделал свой выбор) всегда работает после другого. Это имеет смысл, но это не правильно, не так ли?

Как я могу помешать моей программе работать таким образом всегда в обоих направлениях? Я действительно застрял здесь и не могу понять, как это исправить. Поскольку система интерпретирует оба как ручные, я не могу заключить, как использовать, например, isolate , req или reativeValues ​​ (возможно для счетчика) для решенияэто и я не могу найти блестящую проблему в Интернете, которая такая же, как у меня.

Зачем делать это в первую очередь?

Ну, это просто пример, аналогичныйнастоящая проблема у меня есть. Моя первоначальная проблема проистекает из зависимости между листовой картой и pickerInput и намного сложнее. Пользователь может выбрать один полигон на карте, что приводит к обновлению других выходных данных в приложении. Но пользователь также может выбрать регион «классическим способом» с помощью pickerInput . Имена регионов не отображаются на карте постоянно, только если пользователь наводит курсор. Таким образом, существует pickerInput , чтобы иметь видимый список всех регионов, а также для пользователей, которые не знают, какой полигон является какой областью. Более того, есть опция поиска, встроенная в pickerInput .

Если бы это было так, как в примере, я бы согласился, что он запускает оба. Но в оригинальном случае это сильно снизит производительность (не только процесс выбора выполняется дважды, но также обновит выходные данные) и может привести к ошибкам.

Я был бы очень признателен, если выможет помочь мне решить эту проблему.

Спасибо!

Вот пример кода:

ui :

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...