Как я могу указать параметры в makeCluster параллельно или по снегу?

Я использую пакеты parallel или snow в Windows, функция makeCluster может принимать аргумент rscript, чтобы указать, где находится Rscript, чтобы она выполнялась на рабочих процессах. Что делать, если я хочу, чтобы он был выполнен, почему --vanilla вариант?

РЕДАКТИРОВАТЬ: запуск makeCluster(2, rscript='pathToMyRScript --vanilla') не работает на моем ящике


person statquant    schedule 20.02.2013    source источник
comment
Я не знаю этот пакет и можете ли вы делать то, что хотите, с функциями, которые вы используете, но если вы запускаете R из командной строки, вы, безусловно, можете передать ему --vanilla и свой скрипт таким образом.   -  person Bryan Hanson    schedule 20.02.2013


Ответы (3)


Я думаю, что ваш лучший вариант — либо отправить это как запрос функции авторам пакета, либо погрузиться в определения функций и определить свои собственные вызовы, чтобы попытаться создать узлы PSOCK с помощью Rscript, называемого --vanilla. См. parallel:::newPSOCKnode и проверьте, как он определяет вызов Rscript. Линии интереса следующие:

rscript <- if (getClusterOption("homogeneous", options)) {
    shQuote(getClusterOption("rscript", options))
}
else "Rscript"
cmd <- paste(rscript, "-e", shQuote(arg), env)

Если вы можете изменить функцию для вызова Rscript --vanilla, она может работать нормально. Я удивлен, что запись rscript=<rscript_path> --vanilla не работает.

person Kevin Ushey    schedule 06.03.2013
comment
rscript="Rscript --vanilla не работает, потому что значение этой опции цитируется с помощью функции shQuote, как показано в вашем ответе. Кавычки необходимы, когда путь содержит пробелы, как это происходит, например, при установке R в папку C:\Program Files. - person Steve Weston; 14.03.2013

Я не верю, что эти пакеты предоставляют простой и прямой метод. Я бы создал оболочку и указал полный путь к этой оболочке с опцией «rscript». Теоретически это легко, но на практике вы должны быть осторожны при написании оболочки, чтобы избежать ошибок из-за повторной обработки аргументов, если они содержат пробелы. Например, я подозреваю, что у следующего BAT-скрипта будут проблемы:

"C:\Program Files\R\R-2.15.2\bin\Rscript" --vanilla %*

Я бы, вероятно, использовал сценарий Python с модулем подпроцесса, но есть много возможностей на выбор, и у вас, вероятно, есть свой любимый.

Обновить

Начиная с версии R 3.1.2, параметр rscript_args был добавлен к функции makeCluster. Вы можете использовать эту опцию, чтобы указать опцию --vanilla:

makeCluster(2, rscript_args="--vanilla")
person Steve Weston    schedule 01.03.2013

Из An Introduction to R на странице руководства R, раздел B.4:

If you just want to run a file foo.R of R commands, the recommended way is to use R CMD BATCH foo.R. If you want to run this in the background or as a batch job use OS-specific facilities to do so: for example in most shells on Unix-alike OSes R CMD BATCH foo.R & runs a background job.

Итак, в вашем случае все команды должны войти в сценарий, тогда вы хотите

R --vanilla CMD BATCH your_script.R

Из командной строки, а не из графического интерфейса.

person Bryan Hanson    schedule 20.02.2013
comment
Спасибо, но вопрос, который я задаю, parallel специфичен, я знаю, как использовать Rscript в общем случае. - person statquant; 20.02.2013