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

Using file.choose() to open installed package extdata files

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

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

我认为如果没有 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/Whosebug
# Showing file dialog in C:/Users/r2/R/win-library/3.5/dplyr

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

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

这实际上是 withr::with_dir 所做的,尽管它允许执行任意代码。如果你不介意另一个包(无论如何都可能安装):

getwd()
# [1] "C:/Users/r2/Whosebug"
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/Whosebug"