如何使用R Shiny

时间:2017-11-08 18:03:48

标签: r shiny dt

我想在R Shiny中显示所选数据的选定功能。 要选择数据,我使用选择输入(具有反应性),并使用checkboxGroupInput选择所选数据集的功能。

我知道我的代码中存在一些错误。这是我的代码我该怎么做呢?

    Server- Code
 Data_to_display <<- reactive({
    switch(input$Data,
           "dt_1" = Data1,
           "dt_2" = Data2)
  })

 output$DisplayData <- DT::renderDataTable({
      DT::datatable(Data_to_display(), filter="top")
    })

UI.Code
------

sidebarLayout( 
    sidebarPanel( 
      checkboxGroupInput("show_vars", "Gösterilecek özellikler:",
                         names(Data), selected = names(Data)),
      selectInput("Data", "Choose data:", choices =  c("dt_1","dt_2"), selected = "dt_1")
    ),

    mainPanel(
      DT::dataTableOutput("DisplayData") 
    )

1 个答案:

答案 0 :(得分:0)

您似乎在Data中调用了被动输入(ui)。 To build dynamic UI that reacts to user input,您可以在server上创建UI元素,然后在ui中输出该元素。

但是,我不确定你的确切目标。如果您想在数据表中隐藏/显示列,则会有DT extension (colvis) for exactly that purpose

我在下面添加了两个示例 - 一个带有动态呈现的复选框,另一个带有DT扩展用于隐藏/显示列。

1)动态创建复选框:

    Data1 <- iris
    Data2 <- mtcars

    ui <- fluidPage(
        sidebarLayout( 
            sidebarPanel( 
                selectInput("Data", "Choose data:", 
                            choices =  c("dt_1","dt_2"), selected = "dt_1"),
                ## render dynamic checkboxes
                uiOutput("show_vars")
                ),

            mainPanel(
                DT::dataTableOutput("DisplayData")
            )
        )
    )

    server <- function(input, output) {

        Data_to_display <<- reactive({
            switch(input$Data,
                   "dt_1" = Data1,
                   "dt_2" = Data2)
        })

        ### create dynamic checkboxes
        output$show_vars <- renderUI({
            checkboxGroupInput("show_vars", "Gösterilecek özellikler:",
                               choices = names(Data_to_display()), 
                               selected = names(Data_to_display()))
        })

        output$DisplayData <- DT::renderDataTable({
            DT::datatable(Data_to_display(), filter="top")
        })
    }

    shinyApp(ui, server)

2)DT extension colvis:

Data1 <- iris
Data2 <- mtcars

ui <- fluidPage(
    sidebarLayout( 
        sidebarPanel( 
            selectInput("Data", "Choose data:", 
                        choices =  c("dt_1","dt_2"), selected = "dt_1")),
        mainPanel(
            DT::dataTableOutput("DisplayData")
        )
    )
)

server <- function(input, output) {

    Data_to_display <<- reactive({
        switch(input$Data,
               "dt_1" = Data1,
               "dt_2" = Data2)
    })

    ### hide/show columns with built-in DT extension
    output$DisplayData <- DT::renderDataTable({
        DT::datatable(Data_to_display(), filter = "top",
                      extensions = 'Buttons',
                      options = list(dom = 'Bfrtip', buttons = I('colvis')))
    })
}

shinyApp(ui, server)