2016-09-01 38 views
4

現在、それぞれ独自のタブを持つ動的に作成されたデータテーブルを作成しようとしています。タブの数は、ユーザによって決定される。私はthis postのコードをフレームワークとして使用しました。R Shiny:動的に作成されたタブにデータテーブルを追加する方法

タブを動的に作成することはできますが、データテーブルをタブに追加する方法はわかりません。データテーブルはユーザー入力によっても決定されます。

library(shiny) 
shinyUI(fluidPage(
     titlePanel("Example"), 
     sidebarLayout(
      sidebarPanel(
       selectInput("decision", label = "Choose Dataset", 
          choices = list("mtcars" = "mtcars", 
              "iris" = "iris", 
              "precip" = "precip", 
              "quakes" = "quakes"), 
          selected = NULL, multiple = TRUE) 
      ), 
      mainPanel(
       uiOutput('mytabs') 
      ) 
    ) 
)) 

server.R

library(shiny) 
library(ggplot2) 

shinyServer(function(input, output, session) { 
     output$mytabs <- renderUI({ 
      nTabs = length(input$decision) 
      myTabs = lapply(paste('dataset', 1:nTabs), tabPanel) 
      do.call(tabsetPanel, myTabs) 
     }) 
}) 

ui.Rを: だから、例えば、ui.Rで言う、ユーザーが表示したいデータセットを選択する選択肢を持っています

したがって、対応するデータセットを各タブのデータテーブルに別々にレンダリングしたいと思います。

ご協力いただきありがとうございます。

答えて

3

tabPanelに動的に生成するときにdataTableOutputを追加する必要があります。その後、対応するrenderDataTableを動的に生成する必要があります。

サーバーでこれを行います

library(DT) # need datatables package 
server <- shinyServer(function(input, output, session) { 

    output$mytabs <- renderUI({ 
    nTabs = length(input$decision) 
    # create tabPanel with datatable in it 
    myTabs = lapply(seq_len(nTabs), function(i) { 
     tabPanel(paste0("dataset_",i), 
     DT::dataTableOutput(paste0("datatable_",i))  
       ) 
     }) 

    do.call(tabsetPanel, myTabs) 
    }) 

    # create datatables 
    observe(
    lapply(seq_len(length(input$decision)), function(i) { 
     output[[paste0("datatable_",i)]] <- DT::renderDataTable({ 
     as.data.frame(get(input$decision[i])) 
     }) 
    }) 
) 
}) 
関連する問題