2017-12-30 4 views
1

데이터 테이블의 열과 각 열의 고유 값 개수를 출력하는 세로 막대를 만들려고합니다. 아래의 코드는 이름에 적용되지만 고유 값에 대해서는 목록 변수가 unlist() 인 경우에만 표시 할 수 있습니다. 여러 행에 걸쳐 list 변수를 처리하는 textOutput 또는 동등한 항목을 가져 오는 것에 대해 이야기하는 기사를 찾을 수 없습니다.R 여러 개의 행에 반짝이는 동적 목록 변수

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) 

답변

0

우리는 list

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

- 전체 코드

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) 

또는 우리가 같은 코드를 사용하는 경우에 unique 요소에 lengths을 사용할 수 있습니다 에이 영업에서의 대신 lapply 기본 인수가 simplify = TRUE이기 때문에 vector을 반환 sapply를 사용 (항상 list 출력이 반환) 그와는 simplify2array

ord_values <- sapply(mtcars, function(x)length(unique(x))) 
output$dsordsGrp <- renderText({ord_values}) 

편집을 사용 renderUI

+0

renderText 변경 lapply와 sapply 형태의 수정 된 길이는 지금 내가 얻은 결과와 같은 결과를 가져옵니다. 나는 여전히 두 번째 열을 항목 문자열로보고 (25 3 27 22 22 29 30 2 2 3 6) 행으로 분리하지 않습니다. 이름 열을 정렬하는 별도의 행으로 데이터를 출력하는 방법을 알고 계십니까? – terrangreen

+0

@terrangreen 귀하의 질문은 그'unlist' 부분을 제거하는 방법이라고 생각 했습니까? 이것을 행으로 분리하려면'cat'을 사용하십시오. – akrun

+0

좋아요, cat은 콘솔에서 원하는 결과를 얻습니다. 나는 여전히 목록 변수 (또는 벡터, 더 나은 경우)를 여러 행에 걸쳐 표시 할 필요가있다. – terrangreen