SelectInput下的for循环

时间:2019-08-28 04:38:57

标签: r shiny

关于我以前的帖子(请参阅下面的链接),我试图提出以下解决方案,但似乎没有用。谁能帮忙

  df <- structure(list(A = structure(c(1L, 4L, 6L, 1L, 8L, 2L, 7L, 3L, 
  5L, 5L, 1L, 8L, 2L, 7L, 2L), .Label = c("asd", "dfg", "fgdsgd", 
  "fsd", "gdfgd", "gs", "sdfg", "sf"), class = "factor"), B = c(29L, 
  24L, 46L, 50L, 43L, 29L, 32L, 24L, 35L, 39L, 33L, 47L, 53L, 26L, 
  31L), C = structure(c(8L, 5L, 1L, 6L, 3L, 2L, 9L, 7L, 6L, 3L, 
  2L, 9L, 8L, 8L, 4L), .Label = c("asd", "er", "fg", "gf", "gfd", 
  "gfg", "qw", "sf", "tr"), class = "factor"), D = c(36L, 56L, 
  39L, 26L, 56L, 35L, 27L, 31L, 33L, 45L, 34L, 27L, 43L, 40L, 56L
  ), E = structure(c(8L, 5L, 1L, 6L, 3L, 2L, 9L, 7L, 6L, 3L, 2L, 
  9L, 8L, 8L, 4L), .Label = c("asd", "er", "fg", "gf", "gfd", "gfg", 
  "qw", "sf", "tr"), class = "factor"), F = c(44L, 34L, 37L, 23L, 
  37L, 51L, 28L, 36L, 33L, 31L, 39L, 43L, 25L, 37L, 43L)), class = 
  "data.frame", row.names = c(NA, 
  -15L))
  library(shiny)
  runApp(
   list(
  ui = fluidPage(
  uiOutput("myList")
  )
 , server = function(input, output, session){
  output$myList <- renderUI({
    for(i in names(Filter(is.factor,df)))
      {selectInput("compName", i , choices = c(levels(df[,i])))}
  })
  }
  )
  )

1 个答案:

答案 0 :(得分:0)

for循环中,您必须初始化一个列表/向量/矩阵以保存结果

output$myList <- renderUI({
        tgs_lst <- list()
        for(i in names(Filter(is.factor,df)))
        {tgs_lst[[i]] <- selectInput("compName", i , choices = c(levels(df[,i])))}
        tgs_lst
        #simple and short way using lapply
        #lapply(names(Filter(is.factor,df)), function(i) selectInput("compName", i , choices = c(levels(df[,i]))))
      })