R闪亮通过选中复选框下载文件

Posted

技术标签:

【中文标题】R闪亮通过选中复选框下载文件【英文标题】:R shiny to download files by selecting the checkbox 【发布时间】:2021-09-12 05:13:36 【问题描述】:

这段代码基本上来自 UI 页面,我想在其中通过复选框选择文件名,然后选择这些文件名,然后单击下载按钮选择的文件将被下载。我被困在 UI 我无法在 UI 上获得这些复选框。 它显示输出为

[object] [Object]

代码如下-

ui <- fluidPage(
verbatimTextOutput("links_list")
)

server <- function(input, output, session) 
get.files <- reactive(
list.files("/Users/harshmeetsingh/Downloads/")
)  

obsList <- list()

output$links_list <- renderUI(    
lapply(as.list(1:length(get.files())), function(i)

  btName <- get.files()[i]
print(btName)
# creates an observer only if it doesn't already exists
 if (is.null(obsList[[btName]])) 
 obsList[[btName]] <<- btName 
 
fluidRow(checkboxInput(btName, get.files()[i])  )
 )
 )
output$downloadzip<-downloadHandler(
filename = function()
  paste0("Extract.zip")
,
content = function(file)
  files <- NULL;
  for (i in 1:length(obsList))
    if(input[[obsList[[i]]]])
      files <- c(paste("output_file/",obsList[[i]],sep=""),files)
  
  #create the zip file
  zip(file,files)
,
contentType = "application/zip"
)

 tempText <- eventReactive(input$TempTest, 
l<-c()
for (i in 1:length(obsList))
  
  if(input[[obsList[[i]]]])
    l<-c(l,paste("output_file/",obsList[[i]],sep=""))


return(paste(l) )
,
ignoreInit = TRUE)

output$Temp <-  renderPrint( tempText()) 





shinyApp(ui=ui,server=server)

【问题讨论】:

这可能相当简单,但使用minimal reproducible example 会更容易做到(例如,不使用硬编码的主目录)。 【参考方案1】:

我们可以使用checkboxGroupInput() 来选择所有文件。 input$files_chosen 将是一个包含所有选定文件名的列表。

请注意,此应用显示主目录中的文件。这可以通过更改setwd() 中提供的路径进行修改。

应用程序:

library(shiny)

#to use relative paths inside zip function
setwd('~')

ui <- fluidPage(
  downloadButton('downloadzip'),
  uiOutput("links_list")
)

server <- function(input, output, session) 
  get.files <- reactive(
    list.files()
  )  
  
  output$links_list <- renderUI(checkboxGroupInput(inputId = 'files_chosen',
                                                    label = 'Choose Files',
                                                    choices = get.files())
  )
  
  output$downloadzip <- downloadHandler(
    filename = function()
      "Extract.zip"
    ,
    content = function(file)
      #create the paths to look for the files.
      files <- input$files_chosen 
      #create the zip file
      zip(zipfile = file, files = files)
    ,
    contentType = "application/zip"
  )


shinyApp(ui=ui,server=server)

【讨论】:

这个不适用于 CSV 文件,请您检查一下 CSV 文件吗? @harshmeetchandhok 我使用该应用程序压缩了一些 .csv 文件并且它可以工作。你遇到了什么错误? 我提供了我的工作目录,然后选择了 csvs,然后在 r studio 中下载时出现此错误 zip 警告:名称不匹配:table_from_page_12.csv zip 警告:名称不匹配:table_from_page_124.csv zip 错误:无去做! (尝试:zip -r9X /var/folders/dq/j0g3xb252n7_c5pq4gvm8dqc0000gp/T//RtmpoGsqJq/filecea64a8b9a1.zip .-i table_from_page_12.csv table_from_page_124.csv) 您可以使用setwd() 设置工作目录,以便能够使用相对路径。您收到的错误是因为找不到该文件。我编辑了答案。

以上是关于R闪亮通过选中复选框下载文件的主要内容,如果未能解决你的问题,请参考以下文章

如何根据带有闪亮元素的 R Markdown 文档中的条件禁用按钮?

闪亮:更改输入后保持选中数据表上的框

r - 在传单上叠加fileInput闪亮

闪亮:未选中复选框时,xts 图(xtsExtra)消失

闪亮,R:复选框,geom_hline,ggplot

如何在闪亮应用程序的数据表中将逻辑列转换为静态复选框?