#r #setwd
Вопрос:
У меня есть сценарий R, который должен изменить рабочий каталог с помощью setwd().
Мой код:
setwd(file.path(work_dir, database_dir, study))
Я могу приостановить свой сценарий непосредственно перед тем, как эта строка должна быть выполнена (с помощью browser()
), введите код в консоль без проблем, но всякий раз, когда строка выполняется из сценария, я получаю сообщение об ошибке, в котором говорится, что «ошибка при открытии файла: система не может найти указанный файл». В моем сценарии перед вызовом setwd я подтвердил, что путь существует с помощью file.exists(file.path(work_dir, database_dir,study))
. Я также перезапустил R studio, закрыл и снова открыл все свои сценарии, чтобы убедиться, что это не было причиной проблемы.
У кого-нибудь есть еще какие-нибудь предложения, чтобы я попробовал?
Комментарии:
1. Может быть, я просто в замешательстве, но почему вы меняете свой рабочий каталог на путь к файлу ?
2. Функция file.path() создает путь к файлу из компонентов независимым от платформы способом. Я использовал его много раз раньше без проблем.
3. Если каталог не существует или вместо этого это файл, я получаю сообщение об ошибке
cannot change working directory
«нетcannot find
«, предполагающее , что, возможно, эта строка не является ошибочной. (Кстати, яfile.path
все время использую для создания путей к каталогам, я думаю, что вместо этого имя функции может быть файл/каталог-агностик, напримерmake.path
илиcreate.path
или подобное … но все в порядке. Вместо этого вы можете использоватьdir.exists
вместоfile.exists
, это логически более соответствует вашим намерениям и приведет к ошибке, если это действительно файл, когда он должен быть каталогом.)4. Я согласен, что это очень странно, что я получаю сообщение об ошибке «Ошибка при открытии файла». Я не знаю, что еще попробовать. Я даже удалил файл. путь и набрал путь только к первой вложенной папке вручную безрезультатно. Чего я действительно не понимаю, так это почему команда без проблем работает в консоли, но не будет работать из сценария.
Ответ №1:
Сообщение о том, как я решил эту проблему:
Сценарий, который изменил каталог (я назову этот сценарий 2), сначала был вызван другим сценарием (я назову этот сценарий 1). сценарий 1 и сценарий 2 находятся в одном каталоге, но в разных каталогах от того, где я пытался изменить. сценарий 1 называется сценарием 2 с использованием исходного кода(«script2.R»). Когда я изменил это на источник(путь к файлу(work_dir, «script2.R»)) У меня больше не было проблем с командой setwd (). Я ПРЕДПОЛАГАЮ, что, когда я менял каталоги, Rstudio «забыла», какой сценарий он должен был выполняться, и именно поэтому я получил ошибку «файл не существует».
Если у кого — то есть еще какие-то мысли- пожалуйста, поделитесь!