2014-02-23 4 views
23

Ich automatisiere einige webscraping mit R in cron und manchmal verwende ich R CMD BATCH und manchmal verwende ich Rscript.Warum (oder wann) ist Rscript (oder kleiner) besser als R CMD BATCH?

Um zu entscheiden, welche zu verwenden, fokussiere ich hauptsächlich, wenn ich die .Rout Datei will oder nicht.

Aber das Lesen der Antworten auf einige Fragen hier in SO (wie this oder this) scheint es, dass Rscript-R CMD BATCH bevorzugt.

Also meine Fragen sind:

  • Neben der Tatsache, dass die Syntax ein wenig anders ist und R CMD BATCH spart .Rout Datei während Rscript nicht, was sind die wichtigsten Unterschiede zwischen den beiden von ihnen?

  • Wann sollte ich eines bevorzugen? Genauer gesagt, ist in der oben genannten Aufgabe eine von ihnen bevorzugt?

  • Ich habe noch nicht verwendet littler, wie unterscheidet es sich sowohl von Rscript und R CMD BATCH?

Antwort

15

R CMD BATCH ist alles, was wir vor Jahren hatten. Es macht I/O sehr schwer und hinterlässt Dateien.

Die Dinge wurden besser, zuerst mit Little und dann auch mit Rscript.Beide können für ‚shebang‘ Linien wie

#!/usr/bin/r 

#!/usr/bin/Rscript 

und beide verwendet werden können, mit Paketen wie getopt und optparse verwendet werden --- so dass Sie die richtigen R-Skripte schreiben, die als Befehle wirken können. Wenn Dutzende von ihnen haben, mit einfachen wie diesem Start, die ich als install.r pkga pkgb pkgc nennen kann und die werden all drei und ihre Abhängigkeiten) für mich von der Befehlszeile installieren, ohne die R Prompt hogging:

#!/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) 

Und wie Karl habe ich Cronjobs, die ähnliche R-Skripte aufrufen.

Bearbeiten am 2015-11-04: Ab der letzten Woche, littler is now also on CRAN.

20

Von dem, was ich verstehe:

R CMD BATCH:

  • Echo der Eingangsrechnung
  • kann nicht ausgegeben

Rscript nach stdout:

  • NICHT
  • Ausgang echo
  • nach stdout kann in einer Eins-Liner verwendet werden (d.h. ohne Eingabedatei)

weggeworfener:

  • alles, was Rscript tut
  • können Befehle von stdin (nützlich für Pipelining)
  • schnelle Startzeit
  • Last der Methoden lesen Paket

In p Ich benutze Rscript, um Skripte in der Kommandozeile oder in Crons auszuführen.

+0

Littler kann alles machen, was Rscript kann, geht schneller voran und lädt auch das Methodenpaket. Rscript ist "einfach" häufiger, da es zufällig mit R geliefert wird. –

+0

@DirkEddelbuettel was ist mit den Argumenten, die von bash übergeben werden, die von 'commandArgs (TRUE)' abgefangen werden, werden sie irgendwie unterstützt? Ich sehe keine Information in 'kleinerem' Mann. – jangorecki

+0

Nur gefunden "argv", es scheint nicht dokumentiert zu sein. – jangorecki