setwd () работает странно внутри функции? - PullRequest
2 голосов
/ 18 октября 2019

У меня есть функция выбора файлов, используя file.choose(). Когда я вызываю его внутри скрипта, я хочу открыть определенный каталог, в котором я хочу выбрать файлы. Внутри функции есть цикл, так как мне нужно выбрать кучу файлов. Первый раз он открывается в рабочем каталоге, что предсказуемо. Я поместил setwd() внутрь, чтобы сделать нужный каталог рабочим, чтобы я мог выбирать файлы там. Но когда диалоговое окно открывается в следующий раз, это снова старый рабочий каталог. Но в следующий раз это каталог, который мне нужен. Если я выбираю разные папки, он работает так же - в следующий раз старый каталог, но после этого новый. Я написал короткую функцию, которая воспроизводит поведение:

foo <- function() {
  files <- NULL
  for (i in c(1,2,3,4,5)) {
    x <- file.choose()
    y <- dirname(x)
    setwd(y)
    print(y)
    print(getwd())
  }

}

Просто вызовите эту функцию и попробуйте выбрать файлы в разных или одинаковых каталогах. Вы видите, что имя каталога новое, а getwd() говорит, что установлен новый рабочий каталог, но в предыдущем каталоге открывается диалоговое окно выбора следующего файла. Помните, что мне нужно использовать функцию file.choose (), так как она работает в безголовых ОС, как в Windows, так и в Unix-подобных. Когда я не использую setwd(), это всегда старый рабочий каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...