Изолировать ввод после первого по умолчанию в блестящем - PullRequest
0 голосов
/ 31 октября 2019

Я работаю с динамическим пользовательским интерфейсом и хотел бы выбрать значения по умолчанию и ввести, и изолировать следующие значения.

В следующем примере я могу выделить значение по умолчанию (value = isolate(input$dynamic)), но не могу установить значение по умолчанию (отличное от минимального).

Есть ли способ сделать оба (установитьзначение и изолировать после)?

library(shiny)

ui <- fluidPage(
        fluidRow(
            textInput("label", "labelasd"),
            selectInput("type_of_pe", "Type of policy estimate", c("type 1", "type 2", "type 3")), 
            uiOutput("data_in")
        )
    )

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

    output$data_in <- renderUI({
        output <- tagList()
        output [[1]] <- sliderInput("dynamic", input$label, value = isolate(input$dynamic), min = 0, max = 100)
        output [[2]] <- sliderInput("dynamic", input$label, value = isolate(input$dynamic) * 20, min = 5, max = 20)
        if (input$type_of_pe == "type 1") {
            lapply( 1, function(x) output[[x]] )
        } else if (input$type_of_pe == "type 2") {
            lapply( 2, function(x) output[[x]] )
        } else if (input$type_of_pe == "type 3") {
            lapply( c(1,2), function(x) output[[x]] )
        }

    })
     }
shinyApp(ui = ui, server = server)

1 Ответ

0 голосов
/ 05 ноября 2019

Вы можете использовать реактивное значение, чтобы указать, использовать ли значение по умолчанию или значение от input$dynamic.

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

  # initialize reactive value as TRUE
  use_default <- reactiveVal(T)
  # if slider is moved, stop using the default
  observeEvent(input$dynamic, ignoreInit=T, {
    use_default(F)
  })

  output$data_in <- renderUI({
    # check whether the value should use default or not (default is set to 10)
    value <- if (use_default()) 10 else isolate(input$dynamic)
    output <- tagList()
    output [[1]] <- sliderInput("dynamic", input$label, value = value, min = 0, max = 100)
    output [[2]] <- sliderInput("dynamic", input$label, value = value * 20, min = 5, max = 20)
    if (input$type_of_pe == "type 1") {
      lapply( 1, function(x) output[[x]] )
    } else if (input$type_of_pe == "type 2") {
      lapply( 2, function(x) output[[x]] )
    } else if (input$type_of_pe == "type 3") {
      lapply( c(1,2), function(x) output[[x]] )
    }

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