Получить путь к папке, выбранной пользователем в блестящем - PullRequest
0 голосов
/ 07 июня 2019

Я бы хотел, чтобы пользователь мог выбрать папку (я найду путь для этого позже).

На данный момент это работает для выбора файла, но не папки. Я не могу объяснить, почему. И в каталоге есть файлы (проверено на Windows и Mac). Есть идеи?

library(shiny)
library(shinyFiles)


ui <- fluidPage(
  shinyFilesButton("Btn_GetFile", "Choose a file" ,
                   title = "Please select a file:", multiple = FALSE,
                   buttonType = "default", class = NULL),
  shinyDirButton('folder', 'Folder select', 'Please select a folder', FALSE),

  textOutput("txt_file")     
)


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

  volumes = getVolumes()
  observe({  
    shinyFileChoose(input, "Btn_GetFile", roots=volumes, 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))
    }
  })

  observe({  
    if(!is.null(input$Btn_Folder)){
      # browser()
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })


}
shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 07 июня 2019

Это потому, что вы написали Btn_Folder вместо folder здесь:

  observe({  
    if(!is.null(input$Btn_Folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })

Заменить на:

  observe({  
    if(!is.null(input$folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      dir <- reactive(input$folder)
      output$dir <- renderText(as.character(dir()))
    }
  })

В качестве примечания, вам не нужно определять этот реактивный проводник внутри наблюдателя, просто выполните:

  observe({  
    if(!is.null(input$folder)){
      shinyDirChoose(input, 'folder', roots=volumes)
      output$dir <- renderText(as.character(input$folder))
    }
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...