Изменение каталогов в Rscript

#r #command-line-arguments #directory #rscript

#r #аргументы командной строки #каталог #rscript

Вопрос:

Как я могу заставить мои параметры Rscript изменять каталоги?

Если моим аргументом командной строки является Rscript test.R «foo1», я хочу setwd("~/foo1") , но я получаю сообщение об ошибке, что он не может изменить рабочий каталог.

 args<-commandArgs(trailingOnly=TRUE) 
lambda<args[1] 
fileEnd<-args[2] 
replicate<-args[3] 
directory<-args[4] 
setwd(directory)
  

Пример командной строки Rscript test.R 0 1 10 "~/foo1"

Комментарии:

1. Вы проверили, существует ли каталог, который вы пытаетесь изменить. Можете ли вы опубликовать свой код?

2. Кроме того, не рекомендуется менять каталог внутри скрипта.

3. @agstudy: Полностью согласен.

4. Почему бы просто не поместить их все в один каталог?

5. Использование setwd() в скрипте вполне нормально, если в верхней части скрипта явно указано, что любой общий пользователь должен использовать свой собственный соответствующий каталог.

Ответ №1:

Попробуйте это:

 # use commandline arguments
args <- commandArgs(TRUE)

# the first argument is the working dir
working.dir <- args[1]

# change the working dir
setwd(file.path("~", working.dir))
  

Ответ №2:

Невозможно дать вам конкретный ответ, поскольку вы не предоставляете ключевые части своего скрипта. Чтобы упростить устранение неполадок, начните с добавления полного физического пути к каталогу, который вы хотите изменить. Это для обеспечения того, чтобы полный путь работал.

Общие рекомендации.

Наиболее структурированный способ — поместить файл [.Rprofile] в каталог, в котором будет запущен ваш Rscript. Локальный [.Rprofile] будет считан, когда Rscript инициирует сеанс терминала R. В [.Rprofile] вам нужно добавить [setwd(‘/yourpath’) . Это предполагается, если вы просто хотите установить wd при запуске.

Если вам нужно изменить [setwd] в ходе выполнения вашего скрипта / ов, вы, конечно, можете включить их в R-файлы. Помните, однако, что Rstudio и R terminal ведут себя по-разному, когда дело доходит до [загрузка / сохранение]. Rstudio действует динамически, когда вы что-то меняете через его консоль, и показывает изменения непосредственно в окне глобальной среды.

Для запуска Rscript с терминала вам нужно будет убедиться, что для каждого скрипта вы добавляете [load / save] для R, чтобы компенсировать потерю среды, когда она не находится в запущенном сеансе с Rscript.

Важно иметь в виду разницу в поведении между Rstudio и R terminal, особенно если вы тестируете сценарии в Rstudio и ожидаете, что они будут работать так же, как и в R-terminal.