Как установить начальное значение для двух зависимых входных значений (ползунок и числовой) в блестящей?
Мне удалось определить два взаимосвязанных или взаимозависимых ввода в моем блестящем приложении. Прямо сейчас моя проблема состоит в том, чтобы установить определенное начальное значение для этих ползунков и числовых входов. Кажется, они всегда начинаются с минимального значения, даже я не знаю, почему. Как я могу указать уникальную начальную точку или начальное значение для этих входных параметров?
Я приложил упрощенную часть моего приложения, чтобы предоставить вам воспроизводимую версию моей проблемы здесь:
"ui.R"
library(shiny)
shinyUI(fluidPage(
uiOutput("Param_s"),
uiOutput("Param_n")
))
и "сервер.R"
library(shiny)
shinyServer(
function(input,output) {
# Mutually dependent slider and numeric inputs
output$Param_s = renderUI({
sliderInput(inputId = "param_slide",
label= "My input parameter",
value= input$param_numeric,
min=1,
max=200)
})
output$Param_n = renderUI({
numericInput(inputId = "param_numeric",
label= "My input parameter",
value= input$param_slide,
min=1,
max=200)
})
})
Я пробовал разные вещи, чтобы исправить начальное значение, но в итоге ничего не получалось. Любая помощь будет оценена!!
2 ответа
Вот Это Да! Я понял, ребята! Вы должны обновлять только два входных объекта одновременно и до одинакового значения. Это означает, что добавление этих двух строк решило мою проблему, например, установить начальное значение 60:
updateSliderInput(session,"param_slide", value = 60)
updateNumericInput(session,"param_numeric", value = 60 )
Поэтому весь "server.R" будет выглядеть так:
#
library(shiny)
shinyServer(
function(input,output,session) {
# Mutually dependent slider and numeric inputs
output$Param_s = renderUI({
sliderInput(inputId = "param_slide",
label= "My input parameter",
value= input$param_numeric,
min=1,
max=200)
})
output$Param_n = renderUI({
numericInput(inputId = "param_numeric",
label= "My input parameter",
value= input$param_slide,
min=1,
max=200)
})
updateSliderInput(session,"param_slide", value = 60)
updateNumericInput(session,"param_numeric", value = 60 )
})
Вы должны знать только о добавлении этих обновлений с
observeEvent()
когда у вас есть эти входные объекты на других вкладках. В моем случае, который я использую "sidebarMenu", я использовал простую строку кода, как это:
observeEvent(input$sidebar_id =="tab1",{
updateSliderInput(session,"param_slide", value = 60)
updateNumericInput(session,"param_numeric", value = 60 )
})
Иду отсюда .
Вы должны стараться избегать повторного рендеринга (
renderUI
) если возможно.
Быстрее обновить существующие входные данные:
library(shiny)
ui <- fluidPage(
sliderInput(
inputId = "param_slide",
label = "My input parameter",
value = 60,
min = 1,
max = 200
),
numericInput(
inputId = "param_numeric",
label = "My input parameter",
value = 60,
min = 1,
max = 200
)
)
server <- function(input, output, session) {
observeEvent(input$param_numeric, {
updateSliderInput(session, "param_slide", value = input$param_numeric)
}, ignoreInit = TRUE)
observeEvent(input$param_slide, {
updateNumericInput(session, "param_numeric", value = input$param_slide)
}, ignoreInit = TRUE)
}
shinyApp(ui, server)