【问题标题】:Choose folder or folder directory inside shiny app在闪亮的应用程序中选择文件夹或文件夹目录
【发布时间】:2017-04-06 19:11:32
【问题描述】:

我在使用闪亮时遇到问题。我想选择保存我想在我的应用程序中使用的所有文件的文件夹 1)通过将工作目录设置为该文件夹路径或 2)通过将此文件夹中的所有 csv 数据上传到我的应用程序以进行进一步处理。 1)我找到了 shinyFiles 包,但它非常慢 - 不是因为我的电脑 - 并且给了我错误:

Warning: Error in dir.create: invalid 'path' argument
Stack trace (innermost first):
    59: dir.create
    58: dirCreate
    57: observerFunc
     2: runApp
     1: shinyFilesExample

当我选择了一个文件夹并且创建文件夹按钮变为可单击时,我将新文件夹的名称放入其中并单击该面板下方的“+”。有人知道为什么吗?尽管这种方法有效,但速度非常慢。代码如下:

library(shiny)
library(shinyFiles)

ui<-fluidPage(sidebarLayout(

  sidebarPanel(
    shinyDirButton("dir", "Chose directory", "Upload")
  ),

  mainPanel(
    h4("output$dir"),
    verbatimTextOutput("dir"), br()

  )

))


server <- function(input,output,session){

  # dir
  shinyDirChoose(input, 'dir', roots = getVolumes())
  dir <- reactive(input$dir)
  output$dir <- renderPrint(dir())




}
shinyApp(ui = ui, server = server)

还有其他选择吗?也许通过fileInput 函数上传所有 csv 数据?还是另一种方式?它不应该只在本地工作,而是在服务器上工作,所以choose.dir 可能不是正确的方法。 非常感谢

【问题讨论】:

  • 或者是否可以加载所有 csv.xml 的文件夹。使用 fileInput() 函数作为 zip 文件归档?然后解压并提取所有 csv 文件?
  • 你试过addResourcePath()了吗?
  • 谢谢。我对所有这些编程都很陌生,所以我试图了解这个函数的作用但没有完全理解它?应用程序的用户可以浏览并添加资源路径,还是我之前必须设置的固定路径?因为每个使用该应用程序的用户的目录都会更改,因为他/她已将文件夹保存在另一个地方。

标签: r csv shiny


【解决方案1】:

到目前为止,据我所知,shinyfiles 是输入文件夹的唯一方法。它不能在服务器上运行,因为不允许浏览器选择文件夹(出于安全原因)。

如果您希望它在服务器上工作,压缩方式可能是唯一的方法(但我不知道它是否真的可以完成)

【讨论】:

    【解决方案2】:

    函数 getwd() 获取您当前的工作目录。

    server <- function(input,output,session){
    
      # dir
      shinyDirChoose(input, 'dir', roots = c(name=getwd()))
      dir <- reactive(input$dir)
      output$dir <- renderPrint(dir())
    }
    

    【讨论】:

      【解决方案3】:

      如果您的目录中没有太多文件,您可以使用fileInputmultiple=T。您还可以按扩展名过滤它们。

       ui <- fluidPage(
          sidebarLayout(
            sidebarPanel(
              # ?fileInput
              fileInput("file1", "Choose HTML File(s)", multiple=T, accept = ".html")
            ),
            mainPanel(
              verbatimTextOutput("out.print")
            )
          )
        )
      
        
        server <- function(input, output) {
          
          output$out.print <- renderPrint({
            file <- input$file1
            ext <- tools::file_ext(file$datapath)
            
            req(file)
            validate(need(ext == "html", "Please upload  html  file(s)"))
            
            file 
          })
       
        }
      
        shinyApp(ui, server)
      
      

      但是,如果您的文件过多,似乎library(shinyFiles) 仍然是您的选择

      【讨论】:

      • 感谢您添加此替代方案!
      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2015-04-22
      • 1970-01-01
      • 2012-06-10
      相关资源
      最近更新 更多