Как сделать закладку обновленных входов в r блестящий - PullRequest
0 голосов
/ 24 января 2020

У меня есть приложение с большим количеством updateNumericInputs, и я хотел бы иметь возможность добавить в закладки их состояние. Я сделал его невероятно маленьким, но я все еще могу указать на проблему. Я читаю о закладках - я в замешательстве, я подозреваю, что мне нужно больше строк кода, хотя из прикрепленных фотографий мне кажется, что я могу быть на расстоянии одной запятой. Я экспериментировал, пытался взять код из учебников, статей, SO ответов, но я не могу заставить его работать. Я был бы очень признателен за решение и лекцию об этом. Большое спасибо за ваше время!

library(shiny)


ui <- fluidPage(

          numericInput("Min", "Min",min = 0, max = 100, value = 42.5, step = 0.1),
          numericInput("Max", "Max", min = 0.0, max = 100, value = 47.4, step = 0.1),
          bookmarkButton(id = "bookmark")
    )



server <- function(input, output, session) {


  observeEvent(input$Max,{
    req(input$Max, input$Min)

    updateNumericInput(session,
                       "Min",
                       "Min",
                       value = input$Max - 0.1, min = 0.0, max = 100, step = 0.1)

  })




  observeEvent(input$bookmark,{
    reactiveValuesToList(input)
    session$doBookmark()
  })

}

enableBookmarking("url")

shinyApp(ui = ui, server = server)

enter image description here

1 Ответ

0 голосов
/ 25 января 2020

Найдено!

Важно иметь ui в качестве функции с одним аргументом request ui <- function(request) { fluidPage(....) } и на сервере, имеющем onRestore() с векторами, содержащими текущее состояние входов и затем подается как значение к update..Input()

library(shiny)


ui <-  function(request){
  fluidPage(

    numericInput("Min", "Min",min = 0, max = 100, value = 42.5, step = 0.1),
    numericInput("Max", "Max", min = 0.0, max = 100, value = 47.4, step = 0.1),
    bookmarkButton()
  )

}

server <- function(input, output, session) {


  observeEvent(input$Max,{
    req(input$Max, input$Min)
    updateNumericInput(session,
                       "Min",
                       "Min",
                       value = input$Max - 0.1, min = 0.0, max = 100, step = 0.1)

  })


    onRestored(function(state) {

      Min <- state$input$Min
      Max  <- state$input$Max
      updateNumericInput(session, "Min", value = Min,  min = 0.0, max = 100, step = 0.1)
      updateNumericInput(session, "Max", value = Max,  min = 0.0, max = 100, step = 0.1)
    })


}


shinyApp(ui = ui, server = server, enableBookmarking = "url")
...