R Shiny - Как обновить ОДИН вход с несколькими методами ввода - PullRequest
1 голос
/ 30 марта 2019

Я хочу использовать ДВА метода для обновления ОДНОГО входа.
Допустим, я хочу использовать NumericInput и SliderInput.

Когда я обновляю свой NumericInput до 5, SliderInput должен обновляться до 5.
Что бы я ни говорил выше, я видел много примеров.
Но как мне сделать это наоборот?(обновлять друг друга)
Теперь Если я обновлю SliderInput до 6, как мне обновить NumericInput до 6?

Вот что я пробовал, но не получилось:

ui <- fluidPage(
numericInput("year", "", min = 1979, max = 2017, value = 1979),
sliderInput("year", "Select Year", min = 1979, max = 2017, value = 1979)
)

#===================================================

server <- function(input, output, session) {
  observe(input$year,  {
    updateSliderInput(session, "year", value = year)
  })

  observe(input$year,  {
    updateNumericInput(session, "year", value = year)
  })

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Это предотвращает проблему с каждым обновлением ввода, так как обновление элемента ввода обновит его соответствующий ввод, что вызовет обновление исходного элемента управления.В лучшем случае это дублирует работу и имеет непредсказуемые последствия или, в худшем случае, бесконечные циклы в сочетании с другими функциями.Обновление общей скрытой переменной решает эту проблему.Это также позволит любому количеству элементов управления влиять на переменную без необходимости обновления.

ui <- fluidPage(
  numericInput("year", "", min = 1979, max = 2017, value = 1979),
  sliderInput("year2", "Select Year", min = 1979, max = 2017, value = 1979),
  textOutput("variableprint")
)

#===================================================

server <- function(input, output, session) {
  reactiveVar <- reactiveValues(commonHiddenVar = NULL)
  observeEvent(input$year,  {
    if(identical(input$year, input$year2)){
      print("update1") #for testing
      reactiveVar$commonHiddenVar <- input$year
    } else {
      updateSliderInput(session, "year2", value = input$year)
    }
  })

  observeEvent(input$year2,  {
    if(identical(input$year, input$year2)){
      print("update2") #for testing
      reactiveVar$commonHiddenVar <- input$year2
    } else {
      updateNumericInput(session, "year", value = input$year2)
    }
  })
  output$variableprint <- renderText(reactiveVar$commonHiddenVar)
}

shinyApp(ui, server)

Вы заметите, что «update1» или «update2» будут печататься только один раз.Если они были добавлены в другом ответе, они напечатали бы оба.

0 голосов
/ 30 марта 2019

Вы имеете в виду что-то подобное?

ui <- fluidPage(
  numericInput("year", "", min = 1979, max = 2017, value = 1979),
  sliderInput("year2", "Select Year", min = 1979, max = 2017, value = 1979)
)

#===================================================

server <- function(input, output, session) {
  observeEvent(input$year,  {
    updateSliderInput(session, "year2", value = input$year)
  })

  observeEvent(input$year2,  {
    updateNumericInput(session, "year", value = input$year2)
  })
}



shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...