如何在ShinyR应用程序中使用renderUI创建的那些选项卡下添加动态内容

时间:2018-08-25 12:15:08

标签: shiny

我正在使用闪亮的R构建应用程序,用户可以在其中选择所需的选项卡,并在其下方显示与这些选项卡相关的数据。

例如,在下面的示例应用程序中,.csv中的mtcars数据将被接受为输入参数。用户可以在tabs字段中选择所需的列名称。这些colmns将被创建为tabs。

现在,我想在适当的标签中显示.csv中与该列有关的数据。也就是说,“ mpg”列中的数据将显示在“ mpg”标签下。

但是我被困在这里。很高兴有人可以告诉我一种在适当的标签下动态显示相关列中数据的方法。

使用的示例代码如下所示:

ConcurrentModificationException

write.csv(mtcars,'mtcars.csv')

} runApp(list(ui = ui,server = server))

1 个答案:

答案 0 :(得分:1)

尝试一下

library(shiny)
library(plyr)
library(dplyr)
library(rlang)
library(DT)
ui <- pageWithSidebar(
  headerPanel = headerPanel('data'),
  sidebarPanel = sidebarPanel(fileInput(
    'mtcars', h4('Uplaodmtcardata in csv format')
  ),
  uiOutput('tabnamesui')),
  mainPanel(uiOutput("tabsets"))
)

server <- function(input, output, session) {
  mtcarsFile <- reactive({input$mtcars})




  xxmtcars <-
    reactive({
      read.table(
        file = mtcarsFile()$datapath,
        sep = ',',
        header = T,
        stringsAsFactors = FALSE
      )
    })

  tabsnames <- reactive({
    names(xxmtcars())
  })

  output$tabnamesui <- renderUI({
    req(mtcarsFile())
    selectInput(
      'tabnamesui',
      h5('Tab names'),
      choices = as.list(tabsnames()),
      multiple = T
    )


  })
  tabnamesinput <- reactive({
    input$tabnamesui
  })

  output$tabsets <- renderUI({
    req(mtcarsFile())

    tabs <-
      reactive({
        lapply(tabnamesinput(), function(x)
          tabPanel(title = basename(x), dataTableOutput(x)))
      })
    do.call(tabsetPanel, c(tabs()))
  })


observe(
  lapply(tabnamesinput(), function(x) {
    output[[x]] <- DT::renderDataTable({
t<-as.data.frame(dplyr::select(xxmtcars(), !! sym(x)) )
   print(t)
   datatable(t)

    })
  })
)
}


runApp(list(ui = ui, server = server))