Попробуйте использовать make для этой цели. Это стандартный инструмент для создания чего-либо, только если это нужно построить. Он даже может проверить, изменились ли предшественники вашего встроенного .RData, а затем перестроить его, даже если он существует.
Сначала вам нужно установить make; если вы на Linux, то, вероятно, уже там. В Windows, если вы установите Rtools , вы получите его.
В вашем рабочем каталоге будет, например, два Rscripts, давайте назовем его foo.R, который создает набор данных и plot.R, который генерирует график и Makefile (файл называется «Makefile»). Makefile может выглядеть так:
all: plot.pdf
my_data.Rda:foo.R
Rscript foo.R
plot.pdf:my_data.Rda
Rscript plot.R
clean:
rm -f my_data.Rda
rm -f plot.pdf
"foo.R" может выглядеть так:
df <- cars
save(df, file = "my_data.Rda")
и "plot.R" могут выглядеть так:
load("my_data.Rda")
pdf("plot.pdf")
plot(df)
dev.off()
В Makefile у вас есть ряд правил, которые вы определяете. Сначала правило «все», которое сообщает программному обеспечению, что делать по умолчанию, а затем правило для каждого элемента проекта, который вы строите, и от чего оно зависит. В приведенном выше у нас есть правило, которое создает «plot.pdf», оно зависит от «my_data.Rda», поэтому он будет запускать ваш скрипт «plot.R» только в том случае, если «plot.pdf» не существует, но также и что my_data.Rda также должна существовать, и если это не так, она сначала будет сгенерирована Вы можете попробовать следующее после того, как make установил и сгенерировал эти три файла в одном каталоге. Запустите следующую команду из терминала:
make
Это создает "my_data.Rda", а затем "plot.pdf". Теперь удалите файл plot.pdf
rm plot.pdf
Затем снова запустите Make:
make
Обратите внимание, что Make не нужно было перестраивать файл my_data.Rda, поэтому это не нужно. Теперь удалите оба файла и попробуйте снова или запустите:
make clean
Это правило, которое просто возвращает вас к чистому листу, чтобы начать все сначала. Если вы используете Rstudio, в меню buildtools есть даже возможность создать проект с помощью Makefile.