我是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()
中: