web-dev-qa-db-fra.com

Pourquoi (ou quand) Rscript (ou littler) est-il meilleur que R CMD BATCH?

J'automatise du webscraping avec R dans cron et parfois j'utilise R CMD BATCH et parfois j'utilise Rscript.

Pour décider lequel utiliser, je me concentre principalement si je veux le .Rout fichier ou non.

Mais en lisant les réponses à certaines questions ici dans SO (comme this ou this ) il semble que Rscript soit préféré à R CMD BATCH.

Mes questions sont donc:

  • Outre le fait que la syntaxe est un peu différente et R CMD BATCH enregistre un .Rout fichier alors que Rscript ne fonctionne pas, quelles sont les principales différences entre les deux?

  • Quand devrais-je préférer l'un à l'autre? Plus précisément, dans le travail cron mentionné ci-dessus, l'un d'eux est-il préféré?

  • Je n'ai pas encore utilisé littler, en quoi est-ce différent de Rscript et R CMD BATCH?

39
Carlos Cinelli

R CMD BATCH est tout ce que nous avions il y a des années. Cela rend les E/S très difficiles et laisse les fichiers derrière.

Les choses se sont améliorées, d'abord avec littler puis aussi avec Rscript. Les deux peuvent être utilisés pour les lignes "Shebang" telles que

 #!/usr/bin/r

 #!/usr/bin/Rscript

et les deux peuvent être utilisés avec des packages comme getopt et optparse --- vous permettant d'écrire des scripts R appropriés qui peuvent agir comme des commandes. Si vous en avez des dizaines, à commencer par des simples comme celui-ci que je peux appeler comme install.r pkga pkgb pkgc et qui va installer les trois et leurs dépendances) pour moi à partir de la ligne de commande sans monopoliser l'invite 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)

Et tout comme Karl, j'ai des tâches cron appelant des scripts R similaires.

Modifier le 04/11/2015: Depuis la semaine dernière, littler est désormais également sur CRAN .

24
Dirk Eddelbuettel

D'après ce que je comprends:

LOT R CMD:

  • faire écho aux instructions d'entrée
  • ne peut pas sortir sur stdout

Rscript:

  • ne fait pas écho
  • sortie vers stdout
  • peut être utilisé en une ligne (c'est-à-dire sans fichier d'entrée)

littler:

  • tout ce que fait Rscript
  • peut lire les commandes de stdin (utile pour le pipelining)
  • temps de démarrage plus rapide
  • charger le package de méthodes

En pratique, j'utilise Rscript pour exécuter des scripts, en ligne de commande ou en crons.

33
Karl Forner