R Shiny动态列表变量到多行

时间:2017-12-30 04:35:14

标签: r shiny

我正在尝试创建一个侧边栏,用于输出数据表的列和每列中唯一值的数量。下面的代码适用于名称,但是当涉及到唯一值时,我只能在列表变量为unlist()ed时显示它。我找不到任何关于获取textOutput或等效的文章来处理多行的列表变量。

library(shiny)

data(mtcars)

if (interactive()) {
  ui <- fluidPage(
    sidebarLayout(
      sidebarPanel(
        fluidRow(
          column(6, checkboxGroupInput("dsnamesGrp","Variable name")),
          column(6, uiOutput("dsordsGrp"), inline= FALSE)
        )
      ),
      mainPanel(
        dataTableOutput('contents'))
    )
  )

  server <- function(input, output, session) {
    output$contents <- renderDataTable({mtcars})
    dsnames <- list()
    dsnames <- names(mtcars)
    cb_options <- list()
    cb_options[dsnames] <- dsnames
    updateCheckboxGroupInput(session, "dsnamesGrp",
                             label = "Column name",
                             choices = cb_options,
                             selected = "")
    ord_values <- list()
    ord_values <- lapply(mtcars, function(x)length(unique(x)))
    output$dsordsGrp <- renderText({unlist(ord_values)})
  }
}

shinyApp(ui, server)

1 个答案:

答案 0 :(得分:0)

我们可以使用lengths

unique元素的list
ord_values <- lengths(lapply(mtcars, unique))
output$dsordsGrp <- renderText({ord_values})

-full code

library(shiny)

data(mtcars)

if (interactive()) {
  ui <- fluidPage(
    sidebarLayout(
      sidebarPanel(
        fluidRow(
          column(6, checkboxGroupInput("dsnamesGrp","Variable name")),
          column(6, htmlOutput("dsordsGrp"), inline= FALSE)
        )
      ),
      mainPanel(
        dataTableOutput('contents'))
    )
  )

  server <- function(input, output, session) {
    output$contents <- renderDataTable({mtcars})
     dsnames <- names(mtcars)
     cb_options <- list()
     cb_options[dsnames] <- dsnames
     updateCheckboxGroupInput(session, "dsnamesGrp",
                             label = "Column name",
                             choices = cb_options,
                             selected = "")

    output$dsordsGrp <- renderUI({
          HTML(paste(lengths(lapply(mtcars, unique)), collapse="<br/>"))

})
  }
}

shinyApp(ui, server)

或者,如果我们使用与OP中相同的代码,而不是lapply(始终返回list输出),请使用返回sapply的{​​{1}},因为默认参数为vector,并使用simplify = TRUE

simplify2array

编辑:将ord_values <- sapply(mtcars, function(x)length(unique(x))) output$dsordsGrp <- renderText({ord_values}) 更改为renderText