shinyApp :获取文件夹作为输入并将文件夹内的文件用作 R 函数的输入

shinyApp : Getting a folder as input and use the files inside the folder as input of a R function

我是 shiny 的新手,我想创建一个基本的应用程序,从用户那里获取一些信息,然后在后台 运行 一些 R 代码并保存结果。 (我可能最终会绘制结果,但这应该不难。) 但是,我在使用我获得的文件夹作为输入时遇到问题。 运行 应用程序后,我得到 NA 作为我的输出。我也试过 list.files 而不是 path.expand,但同样的问题。 如果有人能告诉我我做错了什么,我将不胜感激。 p.s。我也想使用 checkGroup 输入,用户可以选择所有 3 个选项。

基于闪亮的示例:

source("~myfunction.R")
 ui<-fluidPage(
  fluidRow(
  column(8,
    shinyDirButton("dir", "Chose a directory", "Upload")
  ),
  column(3,
         img(src = "example.png", height = 100, width = 200)
  ))
 ,
  fluidRow(
    column(3, 
           checkboxGroupInput("checkGroup", 
                              h3("Check one or all"), 
                              choices = list("Plot" = 1, 
                                             "Cleaning" = 2, 
                                             "CSV" = 3),
                              selected = 1))),
 verbatimTextOutput('rawInputValue'),
 verbatimTextOutput('filepaths')

  )

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

  volumes = getVolumes() 
  observe({

    shinyDirChoose(input, "dir", roots = volumes, session = session)

      dir.path <- parseDirPath(c(home = '~'),input$dir)
      output$rawInputValue<-renderText({print(dir.path)})
      all.path<- path.expand(dir.path)
    output$filepaths<-renderText({all.path})

    #  myfunction(all.path)
  })

}

在服务器代码中,您需要将对 shinyDirchoos 的调用移到观察者之外,并修复对 parseDirPath 的调用。这样的事情应该有效:

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

  volumes = getVolumes()

  shinyDirChoose(input, "dir", roots = volumes, session = session)

  observe({

    if(length(input$dir) != 1 ) {
      dir.path <- parseDirPath(volumes,input$dir)
      output$rawInputValue<-renderText({dir.path})
    }
  })
}