使用R Shiny checkboxGroupInput為DT::dataTableOutput選擇列

我是Shiny的新手。我正在開(kāi)發(fā)一個(gè)應(yīng)用程序,該應(yīng)用程序連接到數(shù)據(jù)庫(kù)并提取一組數(shù)據(jù),然后讓用戶(hù)通過(guò)一系列selectInput“向下搜索”,然后最終允許他們下載.csv結(jié)果。下載部分很重要。數(shù)據(jù)太大,無(wú)法讓DT用server=false來(lái)渲染所有數(shù)據(jù),所以我需要維護(hù)過(guò)濾后的dataframe,這樣我就可以用自己的下載處理程序而不是DT按鈕來(lái)write.csv()它。

下面這個(gè)最小的例子不起作用,但希望能清楚地說(shuō)明我想做什么。

library(shiny)
library(DT)
library(magrittr)

ids <- c(1, 2, 3, 4, 5)
firstNames <- c("Bob", "Jane", "Jim", "Billy", "Siouxsie")
lastNames <- c("Smith", "Jones", "Thomas", "Idol", "Sioux")
FaveColors <- c("Blue", "Green", "Yellow", "Red", "Black")
df <- data.frame(ids, firstNames, lastNames, FaveColors)

# Define UI 
ui <- fluidPage(

    # Application title
    titlePanel("Minimal Example"),

    # Sidebar 
    sidebarLayout(
        sidebarPanel(
            tabPanel("Columns",
                      checkboxGroupInput(inputId = "ColumnsToShow", label = "Output Columns",
                                         choices = names(df)
                      )
            )
        ),

        # Show a table
        mainPanel(
          DT::dataTableOutput("FilteredDataFrame")
        )
    )
)

# Define server logic 
server <- function(input, output) {
  
  filtered_df <- reactive({
    #THIS DOESN'T WORK :)
    temp_frame <- df %>% select(input$Columns)
    return(temp_frame)
  })

  output$FilteredDataFrame <- DT::renderDT(server=TRUE, {datatable(filtered_df(), extensions = 'Buttons',
                                                                   options = list(scrollx=TRUE,
                                                                                  lengthMenu = c(10,20,30),
                                                                                  paging = TRUE,
                                                                                  searching = TRUE,
                                                                                  fixedColumns = TRUE,
                                                                                  autoWidth = TRUE,
                                                                                  ordering = TRUE,
                                                                                  #dom = 'Bfrtip',
                                                                                  dom = 'tlip',
                                                                                  buttons = c('copy', 
                                                                                              'csv',
                                                                                              'excel')
                                                                   )
  )
  }
  )
}

# Run the application 
shinyApp(ui = ui, server = server)
? 最佳回答:

您使用了錯(cuò)誤的輸入元素,它應(yīng)該是input$ColumnsToShow而不是input$Columns,并且輸入應(yīng)該封裝在select()函數(shù)內(nèi)的all_of()中:

library(shiny)
library(DT)
library(magrittr)

ids <- c(1, 2, 3, 4, 5)
firstNames <- c("Bob", "Jane", "Jim", "Billy", "Siouxsie")
lastNames <- c("Smith", "Jones", "Thomas", "Idol", "Sioux")
FaveColors <- c("Blue", "Green", "Yellow", "Red", "Black")
df <- data.frame(ids, firstNames, lastNames, FaveColors)

# Define UI 
ui <- fluidPage(
  
  # Application title
  titlePanel("Minimal Example"),
  
  # Sidebar 
  sidebarLayout(
    sidebarPanel(
      tabPanel("Columns",
               checkboxGroupInput(inputId = "ColumnsToShow", label = "Output Columns",
                                  choices = names(df)
               )
      )
    ),
    
    # Show a table
    mainPanel(
      DT::dataTableOutput("FilteredDataFrame")
    )
  )
)

# Define server logic 
server <- function(input, output) {
  
  filtered_df <- reactive({
    #THIS DOESN'T WORK :)
    temp_frame <- df %>% select(all_of(input$ColumnsToShow))
    return(temp_frame)
  })
  
  output$FilteredDataFrame <- DT::renderDT(
    server=TRUE, {
      datatable(filtered_df(), 
                extensions = 'Buttons',
                options = list(scrollx=TRUE,
                              lengthMenu = c(10,20,30),
                              paging = TRUE,
                              searching = TRUE,
                              fixedColumns = TRUE,
                              autoWidth = TRUE,
                              ordering = TRUE,
                              #dom = 'Bfrtip',
                              dom = 'tlip',
                              buttons = c('copy', 
                                          'csv',
                                          'excel')
               )
  )
  }
  )
}

# Run the application 
shinyApp(ui = ui, server = server)

公眾號(hào):1024技術(shù)圈

?? 提供互聯(lián)網(wǎng)知識(shí)和資訊,分享IT前沿技術(shù),熱門(mén)資源,大廠(chǎng)面試題 ??

主站蜘蛛池模板: 一区二区免费视频| 亚洲国产欧美国产综合一区| 久久毛片一区二区| 精品一区二区三区高清免费观看 | 日韩十八禁一区二区久久| 国精品无码一区二区三区左线 | 一区二区三区免费在线视频| 国产精品合集一区二区三区| 91精品一区国产高清在线| 精品人妻一区二区三区四区在线| 亚洲av乱码一区二区三区香蕉 | 风间由美在线亚洲一区| 蜜臀AV一区二区| 亚洲国产一区在线| 夜夜添无码一区二区三区| 国产伦精品一区二区三区视频金莲| 精品国产免费一区二区| 精品日韩一区二区| 国产福利在线观看一区二区 | 日本一区二区三区精品国产| 国产麻豆精品一区二区三区| 国产精品揄拍一区二区久久| 精品无码一区二区三区亚洲桃色| 免费av一区二区三区| 日韩欧国产精品一区综合无码| 国产亚洲一区二区三区在线不卡| 精品国产毛片一区二区无码| 国产乱码精品一区二区三| 精品亚洲一区二区| 亚洲电影国产一区| 久久99国产精品一区二区| 久久国产视频一区| 日韩爆乳一区二区无码| 国产自产对白一区| 日本高清天码一区在线播放| 精品一区二区三区水蜜桃| 精品视频在线观看你懂的一区 | 亚洲av高清在线观看一区二区| 日本一区二区三区在线视频 | 国产亚洲一区二区精品| 无码人妻一区二区三区在线视频|