具有动态渲染输入的R Shiny应用程序的书签状态

时间:2018-10-26 20:55:24

标签: r shiny

我想标记一个闪亮的应用程序的状态,其中通过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)

1 个答案:

答案 0 :(得分:0)

您描述的问题已经在开发版的Shiny中得到了解决。

  • 可以在here中找到包含可复制示例的GitHub问题。
  • 解决该问题的相应请求请求为this

但是请注意,此修复程序是在最新的CRAN版本(版本1.1.0)之后进行的。因此,通过install.packages获得的版本将不包含此修复程序。相反,您将必须直接从GitHub安装开发版本。这可以通过

devtools::install_github("rstudio/shiny")