Подтвердить что ты не робот

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Все стало лучше, сначала с littler, а затем с 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-скрипты.

Изменить на 2015-11-04: На прошлой неделе littler теперь также включен в CRAN.

Ответ 2

Из того, что я понимаю:

R CMD BATCH:

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

Rscript:

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

littler:

  • все, что Rscript делает
  • может читать команды из stdin (полезно для конвейерной обработки)
  • более быстрое время запуска
  • загрузить пакет методов

На практике я использую Rscript для запуска скриптов, в командной строке или в crons.