2017-12-30 38 views
1

データテーブルの列と各列の一意の値の数を出力するサイドバーを作成しようとしています。以下のコードは名前のために働いていますが、ユニークな値については、リスト変数がunlist()である場合にのみ表示することができます。私は、複数の行にわたるリスト変数を扱うtextOutputまたは同等のものを取得することについて話している記事を見つけることができませんでした。私たちは、-fullコードRシャイニーダイナミックリスト変数を複数の行に変換する

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) 

それとも、我々は同じコードを使用している場合list

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

unique要素にlengthsを使用することができます

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

a OPでの、代わりのlapply(常にlist出力を返します)デフォルトの引数はsimplify = TRUEで、それとそれがsimplify2array

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

EDITを使用しているためvectorを返すsapplyを使用するには:renderUI

+0

renderTextを変更しましたlapplyとsapplyのフォームに変更された長さは、私が今得たのと同じ出力になります。私はまだ2番目の列がエントリの文字列(25 3 27 22 22 29 30 2 2 3 6)として認識され、行に分割されません。名前の列を揃えて別々の行として出力する方法を知っていますか? – terrangreen

+0

@terrangreenあなたの質問は、その 'unlist'部分を削除する方法だと思いましたか?これを行に分けたい場合は 'cat'を使います – akrun

+0

さて、catはコンソールで目的の結果を得ます。私はまだそれが良い場合は、リストの変数(またはベクトル)を複数の行に渡って表示する必要があります。 – terrangreen

関連する問題