首页 文章

for loop有光泽的变量赋值2

提问于
浏览
0

这篇文章是a previous post的扩展,我不小心过度简化了我的示例代码来复制问题 . 我试图重复创建用于闪亮的变量,具体取决于用户在输入字段中选择的字段数 . 提供的答案非常合适,我希望扩展它 . 上一篇文章的过度简化是使用numericInput来确定要生成的字段数,当我实际需要计算selectInput中选择了多少条目来确定要填充的字段数 . 然后,我需要反复调用服务器中生成的字段来生成输出 . 我尝试扩展此问题的示例代码如下 .

my_letters <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
my_names <- c("Mary", "Joe", "John", "Steve", "Bob", "Linda", "Emily", "Kevin", "Michael", "Tom")
my_number <- as.character(1:10)
my_df <- data.frame(my_letters, my_names, my_number)

letter_choices <- as.character(unique(my_df$my_letters))

ui <- fluidPage(
  selectInput("num_selected", label = "Select Letters", choices = letter_choices, selected = "", multiple = TRUE, selectize = TRUE),
  uiOutput("condPanels")
)

server<-function(input,output,session){

  output$condPanels <- renderUI({
    # if selected value = 0 dont create a condPanel,...
    if(!nrow(input$num_selected)) return(NULL)
    tagList(
      lapply(1:nrow(input$num_selected), function(nr){
        conditionalPanel(
          condition = paste0("input.num_selected >= ", nr),
          textOutput(paste0("Name", nr), "Name"),
          textOutput(paste0("Number", nr), "Number")

        )
      })
    ) 
  })

  output$Name1 <- renderText({ as.character(my_df$my_names[1]) })
  output$Name2 <- renderText({ as.character(my_df$my_names[2]) })

  output$Number1 <- renderText({ as.character(my_df$my_number[1]) })
  output$Number2 <- renderText({ as.character(my_df$my_number[2]) })

}

shinyApp(ui=ui, server=server)

1 回答

  • 1

    你可以在没有这样的条件面板的情况下完成它 . 您可以通过 output[["name"]] 定义输出,以防您也想要动态,...

    my_letters <- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
    my_names <- c("Mary", "Joe", "John", "Steve", "Bob", "Linda", "Emily", "Kevin", "Michael", "Tom")
    my_number <- as.character(1:10)
    my_df <- data.frame(my_letters, my_names, my_number)
    letter_choices <- as.character(unique(my_df$my_letters))
    
    
    ui <- fluidPage(
      sidebarPanel(
        selectInput("num_selected", label = "Select Letters", choices = letter_choices, selected = "", multiple = TRUE, selectize = TRUE)    
      ),
      mainPanel(
        uiOutput("txt")
      )
    )
    
    server<-function(input,output,session){
    
      output$txt <- renderUI({
        amt <- length(input$num_selected)
        if(!amt) return(NULL)
        tagList(lapply(1:amt, function(nr){
            tagList(
              textOutput(paste0("Name", nr)),
              textOutput(paste0("Number", nr))
            )
          })
        )
      })
    
        # if selected value = 0 dont create a condPanel,...
      observe({
        amt <- length(input$num_selected)
        if(!amt) return(NULL)
        lapply(1:amt, function(nr){
            local({
              idx <- which(input$num_selected[nr] == my_df$my_letters)
              output[[paste0("Name", nr)]] <- renderText({ as.character(my_df$my_names[idx]) })
              output[[paste0("Number", nr)]] <- renderText({ as.character(my_df$my_number[idx]) })
            })
        }) 
      })
    
    }
    
    shinyApp(ui=ui, server=server)
    

相关问题