模块中的shinyFiles包

时间:2017-07-07 15:34:55

标签: r shiny

我在使用带模块的shinyFiles包时遇到问题。当我在没有模块的情况下使用它时工作正常。当我在模块中使用它时,我无法深入到目录中(其他线程没有正面答案):

#' @export
dirModule = function(input, output, session, fileRoot = NULL) {
  root = c(C = "/")
  shinyFileChoose(input, session$ns('files'), roots = root, session = session)
  shinyDirChoose(input, session$ns("directory"),  session=session, roots = c(home = '/home', root = '/'), filetypes=c(''))
  shinyFileSave(input, session$ns("fileSave"), roots = root, session = session)

  observeEvent(input$files, { print(parseFilePaths(root, input$files)$datapath) })
  observeEvent(input$directory, { print(parseDirPath(root, input$directory)) })
  observeEvent(input$fileSave, { print(parseSavePath(root, input$fileSave)$datapath) })
}

#' @export
dirModuleUI = function(id) {
  ns = NS(id)

  fluidPage(
    fluidRow(
      shinyFilesButton(ns('files'), label='File select', title='Please select a file', multiple=T),
      shinyDirButton(ns("directory"), label="Directory select", title = "Select directory", FALSE),
      shinySaveButton(ns("fileSave"), label = "File save", title = "Save file as", filetype=list(text='txt'))
    )
  )
}

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并使用Gi​​thub版本解决了。

您可以先install.packages('devtools')安装devtools软件包,然后使用devtools::install_github("thomasp85/shinyFiles")安装最新的shinyFiles软件包。

之后,只需在模块服务器函数中删除所有会话$ ns调用。

答案 1 :(得分:0)

类似的帖子here

这是名称空间问题。我在不同的R版本中多次停留在这里,这是R 3.6中的解决方案。

我无法在R 3.4中使用它,因为它始终无法导航到子文件夹中。

#' @export
dirModule = function(input, output, session, fileRoot = NULL) {
  root = c(C = "/")
  shinyFileChoose(input, 'files', roots = root, session = session)
  shinyDirChoose(input, "directory",  session=session, roots = c(home = '/home', root = '/'), filetypes=c(''))
  shinyFileSave(input, "fileSave", roots = root, session = session)

  observeEvent(input$files, { print(parseFilePaths(root, input$files)$datapath) })
  observeEvent(input$directory, { print(parseDirPath(root, input$directory)) })
  observeEvent(input$fileSave, { print(parseSavePath(root, input$fileSave)$datapath) })
}

#' @export
dirModuleUI = function(id) {
  ns = NS(id)

  fluidPage(
    fluidRow(
      shinyFilesButton(ns('files'), label='File select', title='Please select a file', multiple=T),
      shinyDirButton(ns("directory"), label="Directory select", title = "Select directory", FALSE),
      shinySaveButton(ns("fileSave"), label = "File save", title = "Save file as", filetype=list(text='txt'))
    )
  )
}