Использование file.choose () для открытия файлов extdata установленного пакета - PullRequest
0 голосов
/ 17 марта 2020

Я установил два внешних файла обучающих данных с пакетом, который я хочу, чтобы пользователь выбрал, используя file.choose (). Я могу найти их с помощью system.file ('extdata', package = 'myPackage'), но я хочу, чтобы пользователь мог легко открывать их через селектор, не запуская system.file ().

Поскольку пользователи может не знать, где хранятся пакеты или как оттуда перемещаться, как мне дать им простоту использования, к которой они привыкли в Windows и MacOS?

1 Ответ

0 голосов
/ 17 марта 2020

Я не думаю, что вы можете сделать это без 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 s перед развертыванием подобной функции.)

Это фактически то, что делает 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"
...