我想标记一个闪亮的应用程序的状态,其中通过renderUI()
动态生成一个输入字段。
所有输入均正确导出到生成的URL,但是,通过书签调用应用程序时,总是在动态呈现的输入字段中选择第一个条目,而不是在URL中存储该条目。
这似乎是由于reactive()
函数的错误应用而导致的,在该函数中同时调用了独立输入值和从属输入值。 reactive()
函数似乎被调用了两次,一次是在生成依赖输入之前,另一次是第二次。我认为如果通过书签调用该应用程序,则因变量的值将被忽略,因为尚未定义相应的输入字段。而是总是选择第一个条目。
我在做什么错,我很感谢您澄清。
以下是可重现的示例:
library(shiny)
enableBookmarking(store = "url")
ui <- function(request) {
fluidPage(
selectInput("independentInput",
"A or B",
choices = c("A", "B"),
multiple = FALSE),
uiOutput("dependentInput"), # depends on 'independentInput'
textOutput("finalOutput"),
bookmarkButton()
)}
server <- function(input, output) {
# the choices of the secondary select field depend on the "independentInput" selection
output$dependentInput <- renderUI({
if (input$independentInput == "A") {
.label <- "A's child?"
.choices <- c("a1", "a2", "a3") # one set of secondary choices
}
if (input$independentInput == "B") {
.label <- "B's child?"
.choices <- c("b1", "b2", "b3") # an alternative set of secondary choices
}
selectInput("dependentInput",
label = .label,
choices = .choices,
multiple = FALSE)
})
reac <- reactive({
foo <- input$independentInput
bar <- input$dependentInput
print(paste(foo, bar)) # proves that 'reac' initially runs twice, where 'bar' is NULL during the first run.
if (foo == "A") {
return(paste0(foo, "'s child is", bar))
}
if (foo == "B") {
return(paste(foo, "'s child is", bar))
}
})
output$finalOutput <- renderText({
reac()
})
}
shinyApp(ui = ui, server = server)