如何在 shiny 中为两个相关输入值(Slider 和 Numeric)设置初始值?

How to set an initial value for two dependent input values (Slider and Numeric) in shiny?

我已经在我闪亮的应用程序中定义了两个相互关联或相互依赖的输入。现在,我的问题是为这些滑块和数字输入设置一个特定的初始值。似乎他们总是从最小值开始,即使我现在不明白为什么。如何为这些输入参数指定一个唯一的起点或初始值?

我附上了我的应用程序的简化部分,以便在此处为您提供我的问题的可重现版本:

"ui.R"

library(shiny)

shinyUI(fluidPage(

  uiOutput("Param_s"),
  uiOutput("Param_n")

))

和“server.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)
})


})

我尝试了各种方法来修复初始值,但最终没有任何效果。任何帮助,将不胜感激!!

哇!我知道了伙计们!您应该只同时更新两个输入对象,并将其更新为相同的值。这意味着添加这两行解决了我将初始值设置为 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 )
})

来自 .

如果可能,您应该尽量避免使用 re-rendering (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)

此外,请检查this and this