Почему (или когда) Rscript (или меньше) лучше, чем R CMD BATCH?

Я автоматизирую сканирование с помощью R в cron, иногда использую R CMD BATCH, а иногда Rscript.

Чтобы решить, какой из них использовать, я в основном сосредотачиваюсь на том, хочу я файл .Rout или нет.

Но читая ответы на некоторые вопросы здесь, в SO (например, это или this) кажется, что Rscript предпочтительнее R CMD BATCH .

Итак, мои вопросы:

  • Помимо того факта, что синтаксис немного отличается и R CMD BATCH сохраняет .Rout файл, а Rscript - нет, каковы основные различия между ними?

  • Когда я должен предпочесть одно другому? В частности, является ли один из них предпочтительным в упомянутом выше cron задании?

  • Я еще не использовал littler, чем он отличается от Rscript и R CMD BATCH?


person Carlos Cinelli    schedule 23.02.2014    source источник


Ответы (2)


R CMD BATCH - это все, что у нас было много лет назад. Это делает ввод-вывод очень сложным и оставляет файлы позади.

Дела пошли лучше, сначала с маленьким, а потом и с Rscript. Оба могут использоваться для строк "shebang", таких как

 #!/usr/bin/r

 #!/usr/bin/Rscript

и оба могут использоваться с такими пакетами, как getopt и optparse --- позволяя вам писать правильные сценарии R, которые могут действовать как команды. Если у вас их десятки, начиная с простых, подобных этому, которые я могу назвать install.r pkga pkgb pkgc и которые установят все три и их зависимости) для меня из командной строки, не перегружая приглашение R:

#!/usr/bin/env r       
#
# a simple example to install one or more packages 

if (is.null(argv) | length(argv)<1) {
  cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n")
  q()
}

## adjust as necessary, see help('download.packages') 
repos <- "http://cran.rstudio.com"

## this makes sense on Debian where no packages touch /usr/local 
lib.loc <- "/usr/local/lib/R/site-library"

install.packages(argv, lib.loc, repos)

И, как и у Карла, у меня есть cronjobs, вызывающие похожие сценарии R.

Изменение от 4 ноября 2015 г .: На прошлой неделе littler теперь также на CRAN.

person Dirk Eddelbuettel    schedule 12.03.2014

Насколько я понимаю:

ПАРТИЯ R CMD:

  • повторить входные операторы
  • не может выводить на стандартный вывод

Rscript:

  • НЕ эхо
  • вывод на стандартный вывод
  • может использоваться в однострочном режиме (т.е. без входного файла)

младший:

  • все, что делает Rscript
  • может читать команды из stdin (полезно для конвейерной обработки)
  • более быстрое время запуска
  • загрузить пакет методов
person Karl Forner    schedule 12.03.2014
comment
@DirkEddelbuettel Вы правы. Сопряжение где-нибудь в документах commandArgs с argv улучшило бы поиск. КСТАТИ. почему бы не изменить commandArgs() в маленьком init, чтобы сделать его более переносимым и поддерживающим код, который был написан с учетом Rscript? просто залил фр. - person jangorecki; 23.09.2015
comment
Итак, можем ли мы удалить эти четыре или пять комментариев? Это просто шум. - person Dirk Eddelbuettel; 23.09.2015
comment
Повторяю свой последний довод: littler теперь тоже является пакетом CRAN . - person Dirk Eddelbuettel; 05.11.2015
comment
@DirkEddelbuettel исправлен. - person Karl Forner; 03.10.2016