禁用以另一个闪亮输入为条件的闪亮输入

Posted

技术标签:

【中文标题】禁用以另一个闪亮输入为条件的闪亮输入【英文标题】:Disable a Shiny-input which is conditional on another Shiny-input 【发布时间】:2018-07-21 10:19:55 【问题描述】:

我正在尝试禁用Shiny-input,其值取决于另一个Shiny-input。以前我从shinyjs 中查看了disable() 函数,但是在我的情况下,它似乎无法禁用这种闪亮的输入。下面是我的例子:

library(shiny)
library(shinyjs)
runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    sliderInput(inputId = "First", label = "First",
                      min = 10, max = 100, value = 40, step = 1),

    uiOutput("Second_UI")
  ),
  server = function(input, output, session) 
    output$Second_UI = renderUI(
              sliderInput(inputId = "Second", label = "Second", 
                min = 0, max = input$First, value = 5)       
            )

    disable("Second_UI")

  
))

我基本上想要的是 - 我的第二个 sliderInputSecond 仍会响应地从 First 中获取价值,但是用户不应该能够控制它。

任何指针都将受到高度赞赏。

谢谢,

【问题讨论】:

【参考方案1】:

@Florian 的回答是正确的(感谢您使用我的 shinyjs 包!)。

但是,我想为您的原始代码提供一个替代实现,它可能更简洁、更容易。

不要将滑块创建为renderUI,因为唯一改变的是最大值,您可以使用updateSliderInput() 函数每次只更改最大值。这样元素本身只创建一次,使用起来更快更容易。

library(shiny)
library(shinyjs)
runApp(shinyApp(
    ui = fluidPage(
        useShinyjs(),
        sliderInput(inputId = "First", label = "First",
                    min = 10, max = 100, value = 40, step = 1),
        sliderInput(inputId = "Second", label = "Second", 
                    min = 0, max = 40, value = 5)
    ),
    server = function(input, output, session) 
        observe(
            updateSliderInput(session, "Second", max = input$First)
        )

        disable("Second")

    
))

【讨论】:

【参考方案2】:

这不起作用的原因是您多次渲染元素,但在脚本中只禁用一次 - 在元素实际渲染之前。

然而,我们实际上可以很简单地解决这个问题; Shinyjs 提供了一个 disabled 函数,允许您将输入初始化为禁用。所以下面给出了一个工作示例。

希望这会有所帮助!



library(shiny)
library(shinyjs)
runApp(shinyApp(
  ui = fluidPage(
    useShinyjs(),
    sliderInput(inputId = "First", label = "First",
                min = 10, max = 100, value = 40, step = 1),
    uiOutput("Second_UI")
  ),
  server = function(input, output, session) 
    output$Second_UI = renderUI(
      shinyjs::disabled(sliderInput(inputId = "Second", label = "Second", 
                  min = 0, max = input$First, value = 5))
    )
  
))

【讨论】:

以上是关于禁用以另一个闪亮输入为条件的闪亮输入的主要内容,如果未能解决你的问题,请参考以下文章

使用文本输入计算闪亮应用程序中另一个文本输入的值

在 flexdashboard 闪亮小部件中创建一个依赖于另一个输入变量的输入变量

如何更新此闪亮仪表板上的滑块输入?

如何将闪亮的输入值转换为闪亮的输出表

闪亮的动态/条件过滤选择多个输入(selectizeInput,多个= TRUE)

r-闪亮的服务器选择输入