Shiny App中的文件夹选择(本地和服务器上)以读取文件并保存结果

Posted

技术标签:

【中文标题】Shiny App中的文件夹选择(本地和服务器上)以读取文件并保存结果【英文标题】:Folder selection in Shiny App (locally and on the server) to read the files and save results 【发布时间】:2019-08-09 07:30:01 【问题描述】:

我正在尝试使用here 提出的解决方案。 不同之处在于我希望用户选择两个文件夹,一个用于保存我的代码的结果,一个包含所有文件。 现在的问题是如何将文件保存在第二个文件夹(input$fileout)中。有没有办法将此路径传递给处理我的输入文件的函数?我认为会有一个权限问题。 编辑:我想在 my.analysis() 函数中使用 dataHandler,因为我需要保存多个 png、csv 和一些特定格式的文件。最好的方法是什么?我的shinyApp不打印任何东西,除了分析完成,下载结果。

这是更新后的 ui.R

library(shiny)
library(shinythemes) 
library(shinyWidgets)

 shinyUI(tagList(fluidPage(theme = shinytheme("lumen"),
                      includeScript("./www/text.js"),
                      titlePanel("Test"),

                      fluidRow(
                        column(4,

                                  tags$div(class="form-group shiny-
           input-container", 

                         tags$div(tags$label("Choose a
    folder", class="btn btn-primary",
                                                              tags$input(id = "fileIn", webkitdirectory = TRUE, type = "file", style="display: none;", onchange="pressed()"))),
                                          tags$label("No folder choosen", id = "noFile"),
                                          tags$div(id="fileIn_progress", class="progress progress-striped active shiny-file-input-progress",
                                                   tags$div(class="progress-bar")
                                          )     
                                 )),


                                 verbatimTextOutput("tbl")
                        ), 

                       fluidRow(

                         column(8,
                                verbatimTextOutput("results"))

                       )
  ),
   html("<script type='text/javascript' src='getFolders.js'>
   </script>")
  )

  )          

还有我的 server.R

   library(shiny)
library(ggplot2)
library(shinythemes)
library(shinyWidgets)
library(flowCore)
source("myanalysis.R")
options(shiny.maxRequestSize=50*1024^2) 
shinyServer(function(input, output, session) 
  observeEvent(input$go, 
  df <- reactive(
    print(input$fileIn)
    # Below returns NULL, as it does not have any files in it yet.
     print(input$fileout)
    inFiles <- input$fileIn
    if (is.null(inFiles))
      return(NULL)


      my.analysis(fs = tmp,output=input$fileout)

  )
  output$tbl <-renderPrint(
   df()
  )

  output$results = renderPrint(input$mydata
  )

)
)

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

这里有两个选项:

选项 1

如果您只想在服务器端选择一个文件夹(如果您的应用在本地运行,则可以是本地系统),您可以使用ShinyFiles。

选项 2

如果您的应用程序在服务器中运行,那么您不可能将数据从 Shiny 应用程序写入本地目录。这种情况下的解决方案是将结果保存在服务器中,稍后允许用户使用downloadHandler函数下载。

【讨论】:

在这种情况下,您可以使用选项 2。 感谢 Geovany 我找到了一种方法。我有多个情节,所以不知道如何使用 downloadHandler。

以上是关于Shiny App中的文件夹选择(本地和服务器上)以读取文件并保存结果的主要内容,如果未能解决你的问题,请参考以下文章

Shiny App:从上传的文件中获取输入选择

如何防止我的 Shiny App 在开源闪亮服务器中断开连接?

从 RStudio 发布到本地 Shiny Server

Shiny 应用程序 (R) 中的交互式目录输入

在内部服务器上设置Shiny app

如何处理 Shiny App 部署中的文件计数超出限制错误 [关闭]