Поиск файлов R, размещенных в проекте R, и поддержание относительных путей

#r #rscript

#r #rscript

Вопрос:

Хорошо, итак, мне нравится использовать R-проекты в Rstudio для сценариев и данных, с которыми я работаю. Однако, допустим, я хочу поместить эти скрипты в другой каталог … R не обнаруживает файл .Rproj, если скрипт не вызывается из каталога, в котором он размещен. Есть ли какой-либо способ получить исходный код R-скрипта, который является частью R-проекта, из другого каталога?

Это актуально, поскольку у меня есть система, в которой я выполняю анализ и создаю цифры в одном каталоге, но затем создаю документы LaTeX, которые используют эти цифры в другом каталоге. Мне нравится иметь возможность использовать исходные коды R-скриптов, которые создают рисунки, и сохранять их в каталоге, где я пишу на LaTeX.

Вот MRE:

Поскольку проект R уже создан в каталоге (выполняется через Rstudio) … давайте назовем его ~/test .

Создайте некоторые данные:

 a <- 1:10
dat <- data.frame(a = a, b = a   rnorm(length(a), 10, 2))
save(dat, file = "test.RData")
  

Поместите следующий скрипт в ~/test. Давайте назовем это test.R.

 load("test.RData")

pdf(file = "plot.pdf")
plot(b ~ a, data = dat)
dev.off()
  

Отлично работает, не так ли? Но если мы попробуем выполнить следующее из любого другого каталога, R не сможет этого понять.

 cd ~
Rscript ~/test/test.R
  

Какие-нибудь продуманные решения? Я полагаю, что это достаточно просто setwd() использовать в скрипте, из которого я получаю исходный скрипт, но это сводит на нет всю цель использования R-проектов.

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

1. Я не уверен, что понимаю. Rscript не имеет ничего общего с RStudio или проектами RStudio. Если вы вызываете скрипт из определенного каталога, если не указано иное, этот каталог будет корневым каталогом, в котором он ищет файлы (поскольку вы не указываете абсолютные пути). В вашем случае вы вызываете Rscript из своего домашнего каталога, так что именно здесь R ищет "test.RData" .

2. Извините, следовало прояснить это в вопросе. Да, я вызываю скрипт из домашнего каталога, но скрипт находится в ~/test, и данные загружаются изнутри скрипта. Возможно, я просто запутался в том, что такое проект R и как его следует использовать

3. Да, я понимаю, что вы сделали, и, как я объясняю в своем первом комментарии, поведение соответствует ожиданиям. Проект RStudio не имеет ничего общего с самим R. Если вы настроите проект RStudio, он (среди прочего) создаст метафайл с параметрами, специфичными для RStudio. Как вы уже указывали, вам нужно использовать setwd для указания рабочего каталога , если вы вызываете R (или Rscript ) из другого каталога.

Ответ №1:

Вы могли бы использовать setwd("~/test/") в начале сценария и при необходимости изменить его позже.

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

1. Да, я включил это в конец исходного вопроса.