闪亮的renderUI selectInput返回了NULL。

7
我正在尝试使用一种响应性模型,其中一个输入影响多个输出,就像在闪亮的速查表中描述的那样。由于选择列表是动态呈现的(未在示例中显示),因此我需要使用renderUI。 然而,在初始化期间,selectInput返回NULL而不是默认值。在第一个NULL值之后,输入按预期工作。我是shiny的新手,可能做错了什么。
更新:其他控件在初始化后意外地返回了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)

    })

  }))

9
我在使用 Shiny 时经常需要用到 if(!is.null(input$something)) - cory
2个回答

6

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 的使用有点令人困惑。 - AmagicalFishy
2
你看过这个问题吗?我的答案尽可能地模仿了问题中的代码。 - DeanAttali

1

如果您使用is.null()并返回您的输入$A的“默认值”,则可能会起作用:

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

   input$A 

})

感谢dugar和cory。我已经有一个类似于dugar提供的解决方案。我不确定这是一个bug,还是我的代码实现错误。我猜这是一个闪亮的bug。 - Eduardo Bergel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接