R if / else для загрузки RData или запуска кода - PullRequest
0 голосов
/ 22 января 2019

Я заинтересован в поиске стратегий в R для запуска какого-либо кода для получения необходимого результата, а затем для сохранения, или, если файл RData существует, загрузите его вместо кода.

В качестве примера:

if(!file.exists("saved.RData"){       
    savethis <- c(1,2,3,4)
    save(savethis, file="saved.RData")
}
if(file.exists("saved.RData"){
    load("saved.RData")
}

Любые идеи приветствуются, я хорошо осмотрелся, но не особо.Также интересует, какие стратегии сохранения используются, я обычно сохраняю несколько объектов в один файл. Данные, конечно, с соответствующим названием!

1 Ответ

0 голосов
/ 22 января 2019

Попробуйте использовать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...