R有光泽的

时间:2016-10-16 16:18:40

标签: r shiny reactive-programming

我最近发现了reactiveValuesToList()函数,我用它来跟踪我的应用程序中的输入,因为一些输入是动态创建的。以下是一个简单的例子来说明函数的奇怪行为。

我的应用有3个组件:

  • checkBoxGroupInput():有3个选择

  • uiOutput():根据用户选中的框动态创建数字输入。

  • textOutput():显示网络应用中所有输入用户界面的ID。

以下是上述简单app的脚本:

library(shiny)

ui <- fluidPage(

  # The user selects team names
  checkboxGroupInput(inputId = "team", label = "Select team", choices = letters[1:3]),

  br(),

  # Placeholder for the dynamic numeric inputs that are created based on the selected team names
  uiOutput(outputId = "dynUI1"),

  # Text output for the names of the input UIs in the shiny app
  textOutput(outputId = "uiIds")  
)

server <- function(input, output){

  # These are the input IDs of the dynamically created UI in dynUI1
  uiNames <- c(a = "id_a", b = "id_b", c = "id_c")

  output$dynUI1 <- renderUI({
    if(length(input$team) == 0){
      return(NULL)
    } else {
      lapply(1:length(input$team), function(i){
        inputname <- paste0("Points: team ", input$team[i])
        numericInput(inputId = uiNames[input$team[i]], label = inputname, value = 1, min = 1, max = 5)
      })
    }
  })

  output$uiIds <- renderText({
    names(reactiveValuesToList(input))
  }) 
}
shinyApp(ui = ui, server = server)

在应用启动时,textOuput会显示team,这是正确的,因为这是应用中唯一的输入元素。例如,选中a后,textOutput会显示teamid_a,因为新的输入元素刚刚添加到应用中。奇怪的行为是这样的:当取消选中a时,即使动态输入元素从应用程序中消失,其ID也会保留在textOutput中。

为什么?我该如何纠正?

请复制,粘贴代码并运行以便亲自查看。

0 个答案:

没有答案