我正在尝试使用反应模型,其中一个输入影响多个输出,如闪亮的备忘单中所述。 我需要使用renderUI,因为选择列表是动态呈现的(示例中未显示) 但是,在初始化期间,selectInput返回NULL而不是默认值。在第一个NULL值之后,输入按预期工作。我是新手,可能会做错事。
UPDATE:其他控件意外返回不仅是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)
})
}))
答案 0 :(得分:4)
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)
})
}))
答案 1 :(得分:1)
如果您使用is.null()并返回输入$ A的“默认值”,则可能会有效:
A.r <- reactive({
if(is.null(input$A)) return (1)
input$A
})