使用 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"
我安装了两个外部训练数据文件和一个包,我希望用户使用 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"