【问题标题】:Shiny renderUI selectInput returned NULL闪亮的 renderUI selectInput 返回 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)) 和闪亮的...

标签: r shiny


【解决方案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 的使用有点令人困惑
  • 你看问题了吗?我的回答试图尽可能地模仿问题中的代码
猜你喜欢
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多