shinyFiles文件夹选择:显示默认文件夹

时间:2017-12-30 14:45:17

标签: r shiny

我需要为Shiny用户显示所选文件夹,我在这里询问如何执行此操作(Display selected folder path in Shiny)。它可以工作,但现在我无法弄清楚如何在选择之前显示默认文件夹(例如,当前目录)。

library(shiny)
library(shinyFiles)

ui <- fluidPage( # Application title
  mainPanel(
    shinyDirButton("dir", "Input directory", "Upload"),
    verbatimTextOutput("dir", placeholder = TRUE)  
  ))

server <- function(input, output) {
  shinyDirChoose(
    input,
    'dir',
    roots = c(home = '~'),
    filetypes = c('', 'txt', 'bigWig', "tsv", "csv", "bw")
  )

  dir <- reactive(input$dir)
  output$dir <- renderText({  
    parseDirPath(c(home = '~'), dir())
  })
## change smth here... if output$dir is null, display getwd() but it doesn't work

  observeEvent(ignoreNULL = TRUE,
               eventExpr = {
                 input$dir
               },
               handlerExpr = {
                 home <- normalizePath("~")
                 datapath <<-
                   file.path(home, paste(unlist(dir()$path[-1]), collapse = .Platform$file.sep))
               })
}

# Run the application
shinyApp(ui = ui, server = server)

如果没有选择文件夹,我只能想到显示某些文字的条件面板。但我想应该有更好的方法来做到这一点。谢谢!

1 个答案:

答案 0 :(得分:2)

Conerning“beyond”显示您可以将数据路径变量保存在reactiveValue中并将工作目录设置为默认值:

global <- reactiveValues(datapath = getwd())

应用程序:

library(shiny)
library(shinyFiles)

ui <- fluidPage( # Application title
  mainPanel(
    shinyDirButton("dir", "Input directory", "Upload"),
    verbatimTextOutput("dir", placeholder = TRUE)  
  ))

server <- function(input, output) {
  shinyDirChoose(
    input,
    'dir',
    roots = c(home = '~'),
    filetypes = c('', 'txt', 'bigWig', "tsv", "csv", "bw")
  )

  global <- reactiveValues(datapath = getwd())

  dir <- reactive(input$dir)

  output$dir <- renderText({
      global$datapath
  })

  observeEvent(ignoreNULL = TRUE,
               eventExpr = {
                 input$dir
               },
               handlerExpr = {
                 home <- normalizePath("~")
                 global$datapath <-
                   file.path(home, paste(unlist(dir()$path[-1]), collapse = .Platform$file.sep))
               })
}

# Run the application
shinyApp(ui = ui, server = server)