闪亮的 renderUI selectInput 返回 NULL

Posted

技术标签:

【中文标题】闪亮的 renderUI selectInput 返回 NULL【英文标题】:Shiny renderUI selectInput returned NULL 【发布时间】:2015-08-03 09:23:09 【问题描述】:

我正在尝试使用一个反应模型,其中一个输入会影响多个输出,如闪亮的备忘单中所述。 我需要使用 renderUI 因为选择列表是动态呈现的(示例中未显示) 但是,在初始化期间 selectInput 返回 NULL 而不是默认值。在第一个 NULL 值之后,输入按预期工作。我是闪亮的新手,可能做错了什么。

更新:其他控件在初始化后意外返回不仅 NULL,而且还返回 NA。

见下面的代码。查看控制台输出,第一个输入返回 NULL。

Listening on http://127.0.0.1:6211
 NULL
 chr "1"
 chr "2"
 chr "1"




library(shiny)

runApp(list(

  ui = bootstrapPage(
    fluidPage( uiOutput('ui.A')   )
  ),


  server = function(input, output)

    output$ui.A = renderUI(
      selectInput("A", label = h4("input A"), 
                  choices = list(A_1=1, A_2=2), 
                  selected = 1)
    )

    A.r <- reactive(input$A )

    observe( 

      A <- A.r()
      str(A)

    )

  ))

【问题讨论】:

我不得不经常使用 if(!is.null(input$something)) 和闪亮的... 【参考方案1】:

如果您使用 is.null() 并为 input$A 返回“默认值”,这可能会起作用:

A.r <- reactive(
   if(is.null(input$A)) return (1)

   input$A 

)

【讨论】:

感谢 dugar 和 cory。我已经有一个类似于 dugar 提供的解决方案。我不确定这是一个错误,还是我在代码实现中的错误。我想这是一个闪亮的错误。【参考方案2】:

Shiny 有一个名为observeEvent 的函数,我几乎总是使用它来代替observer。它基本上只在反应值更改时运行一些代码,并且默认情况下它忽略 NULL 值。所以这是使您的示例工作的代码(我所要做的就是将您的 observe( 行更改为 observeEvent(A.r(),

library(shiny)

runApp(list(

  ui = bootstrapPage(
    fluidPage( uiOutput('ui.A')   )
  ),


  server = function(input, output)

    output$ui.A = renderUI(
      selectInput("A", label = h4("input A"), 
                  choices = list(A_1=1, A_2=2), 
                  selected = 1)
    )

    A.r <- reactive(input$A )

    observeEvent(A.r(),  

      A <- A.r()
      str(A)

    )

  ))

【讨论】:

您对A 的使用有点令人困惑 你看问题了吗?我的回答试图尽可能地模仿问题中的代码

以上是关于闪亮的 renderUI selectInput 返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章

如何使用在renderUI的selectInput中选择的选项在主面板中生成不同的输出?

闪亮的模块和 renderUI 传递 javascript 代码

闪亮的 selectInput 'Select All' 层次结构

如何从闪亮的selectInput中删除“”?

来自列 DF 的闪亮 selectInput

闪亮的 SelectInput 和 SelectizeInput