2013-04-05 5 views
3

Я ищу простой способ «установить его и забыть», либо как одну строку аргументов в терминале, либо в простой Java-программе, автоматизировать следующие:Написание кода для: запуска сеанса R, запуска R-скрипта, завершения сеанса, повтора

1) запустить R сессии

2) сказать R к источнику файлов .r, которые содержат код для длительных, моделирования

распараллеленные

3) прекратить R сессии после завершения

4) начать новую сессию R

5) говорят R к источнику другие .r файлы

6) прекратить R сессии после завершения

7) мыльная пена, полоскание, повторите

Мои .r сценарии будут принимать в общей сложности за несколько дней до запуска, в течение которых я буду вне города и не смогу их проверить, и если я запустил их всех на одном сеансе, для меня не будет возможности избежать превышения моей доступной оперативной памяти.

Спасибо!

EDIT: Я бегу R 2.15.3 на Ubuntu 12.04 LTS, с 16 Гб оперативной памяти

+2

Вы пробовали Rscript.exe? используйте его в пакетном скрипте. – Nishanth

+1

Почему бы вам просто не использовать скрипт bash и выполнить каждый R-скрипт с помощью чего-то вроде «R -vanilla <./script1.R && R -vanilla <./Script2.R'? – sidoh

+0

'rm (list = ls()); gc() 'между файлами sourcing освобождает память. – Roland

ответ

4

Процесс запуска и завершения сеансов R осуществляется с помощью Rscript. Так что пишите ваши скрипты называть их так:

Rscript script_1.R 
Rscript script_2.R 
... 
Rscript script_Inf.R 

Это оставляет пункты 2 и 5 ... что это простой вопрос сдачи:

source('/home/sc_evans/script_abc.R') 

... в голове какой-то сценарий (с).

Каждый сценарий получит свой собственный сеанс R, который завершится после завершения. Поместите эти команды в пакетный скрипт и запустите его.


EDIT

Если бы я сделать это сам, я бы забыть об использовании отдельных сценариев, хотя. Пока вы правильно управляете памятью, один процесс должен работать нормально. Разделите свои процессы на соответствующие функции:

massive_process_1 <- function() { 
    x <- do_something() 
    saveRDS(x, '/home/sc_evans/results/first_result.rds')  
} 

massive_process_2 <- function() { 
    x <- do_something() 
    saveRDS(x, '/home/sc_evans/results/second_result.rds')  
} 

massive_process_1() 
massive_process_2() 

И так далее. Следующая функция не будет работать до тех пор, пока первая не будет завершена, и ваши объекты должны умереть в функциях, чтобы вы не исчерпали память.

+0

Ничего себе, это было намного проще, чем я даже ожидал. И да, я должен * лучше управлять своей памятью - я делаю все возможное, чтобы удалить все объекты сразу после использования и вызывать gc() так часто, но это все еще кажется неадекватным. Ну, практика, практика ... –

Смежные вопросы