在Flash中的RenderTable()数据帧上下载Handler [英] Download Handler on RenderTable() dataframe in Shiny
问题描述
我有一个闪亮的应用程序,需要一个csv文件,如下所示:
I have a shiny app that takes a csv file that looks like this:
category
action
并将其输入到数据框中,以仅使用action过滤该类别。
and inputs it into the dataframe to filter the category with only "action".
可复制APP:
UI:
library(shiny)
shinyUI(fluidPage(
titlePanel("Actor Finder"),
sidebarLayout(
sidebarPanel(
fileInput("file","Upload Category List: Must have category as header"),
selectInput("file4", "Select Type", c("A" = "A",
"B" = "B",
"C" = "C"), selected = "A"),
numericInput("file5", "Choose cost", 1000000000),
tags$hr()),
mainPanel(
uiOutput("tb")
)
)
))
服务器:
library(shiny)
library(readr)
library(dplyr)
# use the below options code if you wish to increase the file input limit, in this example file input limit is increased from 5MB to 9MB
# options(shiny.maxRequestSize = 9*1024^2)
actor <- c('Matt Damon','George Clooney','Brad Pitt', 'Clive Owen', 'Morgan Freeman', 'Edward Norton', 'Adrian Granier')
category<-c('action', 'action', 'noir', 'action', 'thriller', 'noir', 'action')
movie <- c('Oceans Eleven', 'Oceans Twelve', 'Fight Club', 'Children of Men', 'The Shawshank Redemption', 'American History X', 'Entourage')
movies <- c(21, 23, 26, 12, 90, 14, 1)
cost <- c(210000, 2300000, 260000, 120000, 90000, 140000, 10000)
Type <- c('A','B','C', 'A', 'B', 'C', 'A')
moviedata<-data.frame(actor, category, movie, movies, cost, Type)
# This reactive function will take the inputs from UI.R and use them for read.table() to read the data from the file. It returns the dataset in the form of a dataframe.
# file$datapath -> gives the path of the file
shinyServer(function(input,output){
data <- reactive({
file1 <- input$file
if(is.null(file1)){return()}
read_csv(file=file1$datapath)
})
# this reactive output contains the summary of the dataset and display the summary in table format
# this reactive output contains the summary of the dataset and display the summary in table format
output$sum <- renderTable({
if(is.null(data())){return ()}
test<-subset(moviedata, category %in% data())
test1<-filter(test, `Type`==input$file4)
test1$`BUDGET`<-input$file5
test1$CHECKING<-ifelse(test1$`BUDGET`>test1$cost,"YES", "NO")
filter(test1, CHECKING=="YES")
})
# the following renderUI is used to dynamically generate the tabsets when the file is loaded. Until the file is loaded, app will not show the tabset.
output$tb <- renderUI({
if(is.null(data()))
h5("Powered by", tags$img(src='optimatic.png'))
else
tabsetPanel(tabPanel("Summary", tableOutput("sum")))
})
}
)
我想要执行以下操作:
输出如下所示:
< a href =https://i.stack.imgur.com/kamTf.jpg =nofollow noreferrer>
1)将下载按钮添加到renderTable数据框。所以我们来说说改变UI中新输出的过滤器,然后我想下载那个新的输出。
1) Add a download button to the renderTable dataframe. So let's say I change the filters for the new output in the UI, then I want to be able to download that new output.
2)将数据帧的格式从DT包中更改为dataTable。
2) Change the format of the dataframe to a dataTable from the DT package.
任何帮助都会很棒,谢谢!
Any help would be great, thanks!
推荐答案
易于使用DT:
1 - 加载包:
library(DT)
2-替换 renderTable
with renderDataTable
(指定 exptension
参数以包含下载按钮):
2- render your table by replacing renderTable
with renderDataTable
(specifying exptension
argument to include download button):
output$sum <- renderTable({...},
extensions = c('Buttons'),
options = list(
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
))
3-使用 dataTableOutput
而不是<$ c $输出结果c> tableOutput 在renderUI中:
3- output the result using dataTableOutput
instead of tableOutput
in the renderUI:
tabsetPanel(tabPanel("Summary", dataTableOutput("sum")))
这篇关于在Flash中的RenderTable()数据帧上下载Handler的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!