使用file.choose()打开已安装的软件包extdata文件

时间:2020-03-17 01:05:18

标签: r package filechooser

我用一个包安装了两个外部培训数据文件,我希望用户使用file.choose()从中选择。我可以使用system.file('extdata',package ='myPackage')找到它们,但我希望用户可以通过选择器轻松打开它们,而不必运行system.file()。

由于用户可能不知道软件包的保存位置或如何从那里导航,因此如何使他们易于使用Windows和MacOS中的习惯?

1 个答案:

答案 0 :(得分:0)

如果没有setwd,我认为您无法做到这一点,但是您不必保持

my_file_chooser <- function(d = getwd()) {
  curdir <- getwd()
  message("Currently in ", curdir)
  on.exit({
    setwd(curdir)
    message("Returning to ", curdir)
  }, add = TRUE)
  setwd(d)
  message("Showing file dialog in ", getwd())
  file.choose()
}

my_file_chooser(system.file(package = "dplyr"))
# Currently in C:/Users/r2/StackOverflow
# Showing file dialog in C:/Users/r2/R/win-library/3.5/dplyr

file choose dialog

# Returning to C:/Users/r2/StackOverflow
# [1] "C:\\Users\\r2\\R\\win-library\\3.5\\dplyr\\doc\\compatibility.Rmd"
getwd()
# [1] "C:/Users/r2/StackOverflow"

(在部署这样的功能之前,您可能应该删除所有message。)

这实际上是withr::with_dir的工作,尽管它允许执行任意代码。如果您不介意另一个软件包(可能仍会安装):

getwd()
# [1] "C:/Users/r2/StackOverflow"
withr::with_dir(system.file(package = "dplyr"), file.choose())
# [1] "C:\\Users\\r2\\R\\win-library\\3.5\\dplyr\\doc\\dplyr.html"
getwd()
# [1] "C:/Users/r2/StackOverflow"
相关问题