【问题标题】:How to set an initial value for two dependent input values (Slider and Numeric) in shiny?如何为闪亮的两个相关输入值(滑块和数字)设置初始值?
【发布时间】:2019-07-05 03:38:30
【问题描述】:

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

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

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


})

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

【问题讨论】:

  • 您永远不会将它们设置为任何特定的东西。这就像两个人走进一家餐馆,每个人都说他们会点对方正在吃的东西。也许添加/更改每个renderUIval <- if (is.numeric(input$param_numeric)) input$param_numeric else some_sane_default,然后sliderInput(..., value=val)
  • 哦!谢谢@r2evans,我已经把解决方案放在这里了。它为我设置了它们的初始值。
  • 你应该接受你自己的答案(如果可以的话,我知道经常会有延迟)。 (您也可以考虑 [accepting]((stackoverflow.com/help/someone-answers)) 回答您之前的问题。)

标签: r shiny slider numeric shiny-reactivity


【解决方案1】:

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

})

您应该只知道使用

添加这些更新

观察事件()

当您在其他选项卡上有这些输入对象时。在我使用“sidebarMenu”的情况下,我使用了一行简单的代码:

observeEvent(input$sidebar_id =="tab1",{
  updateSliderInput(session,"param_slide", value = 60)
  updateNumericInput(session,"param_numeric", value = 60 )
})

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2016-11-25
    • 2020-12-17
    • 2022-01-15
    • 1970-01-01
    • 2023-04-01
    • 2018-02-12
    • 2021-01-02
    • 2018-03-07
    相关资源
    最近更新 更多