Использование checkboxGroupInput как минимум для числового ввода, Shiny R
В моем приложении Shiny есть вторая страница tabPanel, на которой пользователь вводит некоторые значения, например, value1, value2, value3. Затем у меня есть еще одна страница tabPanel Первая, она состоит из checkboxGroupInput, в котором пользователь выбирает, какие значения следует использовать для расчета минимума вставленных значений на второй странице tabPanel. Возможно ли, что этот минимум значений используется в качестве начального значения другого NumericInput на вкладке Вторая страница?
Здесь у меня есть пример для трех вариантов, но на самом деле у меня есть 6, поэтому разделение вариантов с помощью if & ifelse (как здесь: R блестящий: checkboxGroupInput value) было бы очень длинным путем. Есть ли более плавный способ?
Спасибо за ответ.
Например
ui<- navbarPage(title=div("Problem"),
tabPanel (title="First page",
fluidRow(column(2,numericInput("value", "Insert a value", value = **min(of selected values)**, min = 0, max=5, step=0.0001),
checkboxGroupInput("variable", "Inital values expressed as min of:",
choices=c("House",
"Apartment",
"Car"
))))),
tabPanel (title="Second page", fluidRow(column(2,
numericInput("value1", "House", value =0.02, min = 0, max=5, step=0.0001),
numericInput("value2", "Apartment", value =1, min = 0, max=5, step=0.0001),
numericInput("value3", "Car", value =0.15,min = 0, max=5, step=0.0001)))))
server <- function(input, output) { }
shinyApp(ui, server)
1 ответ
Вы можете иметь эту функцию с помощью следующего примера app.R
library(shiny)
ui<- fluidPage(title=div("Problem"),
tabsetPanel(
tabPanel(title = "First page",
uiOutput("reactiveInput"),
checkboxGroupInput("variable", "Inital values expressed as min of:",
choices=c("House"=1, "Apartment"=2, "Car"=3))),
tabPanel (title = "Second page",
numericInput("value1", "House", value =0.02, min = 0, max=5, step=0.0001),
numericInput("value2", "Apartment", value =1, min = 0, max=5, step=0.0001),
numericInput("value3", "Car", value =0.15,min = 0, max=5, step=0.0001))
))
server <- function(input, output) {
insertedValue <- reactive({
variables <- c(input$value1, input$value2, input$value3)
value <- min(variables[as.numeric(input$variable)])
})
output$reactiveInput <- renderUI ({
insertedValue <- insertedValue()
numericInput("value", "Insert a value", value = insertedValue, min = 0, max=5, step=0.0001)
})
}
shinyApp(ui, server)
Если вы хотите, чтобы элемент ввода реагировал на предыдущий пользовательский ввод, он обычно должен отображаться с помощью renderUI
а также uiOutput
, Необходимое значение извлекается в реактивном блоке и далее направляется на элемент ввода внутри renderUI
,
Вы можете пропустить бесконечное чувство, если... еще с помощью checkboxGroupInput
результат в виде числового индекса для numericInput
вектор, просто убедитесь, что вы используете тот же порядок в векторе и checkboxGroupInput
,