Смена каталогов в 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"

2 ответа

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

# 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))

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

Общие предложения.

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

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

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

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

Другие вопросы по тегам