Как установить начальное значение для двух зависимых входных значений (ползунок и числовой) в блестящей?

Мне удалось определить два взаимосвязанных или взаимозависимых ввода в моем блестящем приложении. Прямо сейчас моя проблема состоит в том, чтобы установить определенное начальное значение для этих ползунков и числовых входов. Кажется, они всегда начинаются с минимального значения, даже я не знаю, почему. Как я могу указать уникальную начальную точку или начальное значение для этих входных параметров?

Я приложил упрощенную часть моего приложения, чтобы предоставить вам воспроизводимую версию моей проблемы здесь:

"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)

Кроме того, проверьте это и это .

Другие вопросы по тегам