首页 文章

在R Shiny中创建文件路径列表而不上传文件

提问于
浏览
0

我有一个R脚本,通过循环将函数应用于文件夹中的每个文件 . 该函数采用文件名和扩展名作为输入的完整路径 .

循环的输入使用要循环的每个文件的完整文件路径创建:

listBands <- list.files(myInputDir1, full.names = T)

然后循环:

for (i in 1:12) { 
obj <- listbands[i]
function(obj) 
and so on..
}

我想在一个Shiny应用程序中重新创建它,用户选择要循环的文件夹或选择文件夹中的所有文件 .

到目前为止,我根据这里的另一个问题尝试了这个:

ui <- fluidPage(
  shinyFilesButton("Btn_GetFile", "Choose a file" ,
               title = "Please select a file:", multiple = T,
               buttonType = "default", class = NULL),

textOutput("txt_file")
)


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

volumes = getVolumes()
observe({
  shinyFileChoose(input, "Btn_GetFile", roots = c(home = '~'), session = 
  session)

if(!is.null(input$Btn_GetFile)){
  # browser()
  file_selected<-parseFilePaths(volumes, input$Btn_GetFile)
  output$txt_file <- renderText(as.character(file_selected$datapath))
  }
 })
}

shinyApp(ui = ui, server = server)

但是,此函数尝试上传所有文件,这是不可能的,因为它们太大,也没有必要 .

这个答案:Interactive directory input in Shiny app (R)允许我选择目录,但不能创建一个我可以用作循环输入的列表 .

我有一些R的经验,但对Shiny应用程序来说却是一个新手 . 谁可以帮助我走正确的道路?

1 回答

  • 1

    你可以这样做:

    library(shinyFiles)
    library(shiny)
    
    ui <- fluidPage(
      shinyDirButton("Btn_GetFolder", "Choose a folder" ,
                       title = "Please select a folder:",
                       buttonType = "default", class = NULL),
    
      textOutput("txt_file")
    )
    
    
    server <- function(input,output,session){
    
      volumes = getVolumes()
      observe({
    
        shinyDirChoose(input, "Btn_GetFolder", roots = volumes, session = 
                          session)
        if(!is.null(input$Btn_GetFolder)){
           # browser()
          myInputDir1 <- parseDirPath(volumes, input$Btn_GetFolder)
          listBands <- list.files(myInputDir1, full.names = T)
          output$txt_file <- renderText(listBands)
    
       #Call your function here..... 
        }
      })
    }
    
    shinyApp(ui = ui, server = server)
    

    您可以使用 shinyFiles 包中的 shinyDirChoose 选择目录 . 赢得't be uploaded here and you' ll获取该目录中的所有文件名 .

    希望能帮助到你!

相关问题