Führen Sie das R-Skript über die Befehlszeile aus


Antworten:


671

Wenn Sie möchten, dass die Ausgabe auf dem Terminal gedruckt wird, verwenden Sie am besten Rscript

Rscript a.R

Beachten Sie, dass bei Verwendung R CMD BATCH a.Rdieser Option anstelle der Umleitung der Ausgabe zum Standardausgang und der Anzeige auf dem Terminal eine neue Datei mit dem Namen a.Rout erstellt wird.

R CMD BATCH a.R
# Check the output
cat a.Rout

Eine andere Sache, die Sie bei der Verwendung von Rscript beachten sollten, ist, dass das methodsPaket standardmäßig nicht geladen wird, was zu Verwirrung führen kann. Wenn Sie sich also auf etwas verlassen, das diese Methoden bieten, sollten Sie es explizit in Ihr Skript laden.

Wenn Sie die ./a.RArt und Weise des Aufrufs des Skripts wirklich verwenden möchten, können Sie #!oben im Skript eine entsprechende hinzufügen

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

Ich werde auch bemerken, dass wenn Sie auf einem * Unix-System laufen, es das nützliche Littler- Paket gibt, das eine einfache Befehlszeilen- Weiterleitung an R bietet. Ist es möglicherweise erforderlich, Littler zu verwenden, um glänzende Apps über ein Skript auszuführen? Weitere Details finden Sie in dieser Frage .


28
Ohne das #! Ihre Befehlszeile versucht, es als Befehlszeilenskript auszuführen, wobei derselbe Interpreter verwendet wird, der Ihre Befehle interpretiert. Es weiß nicht, dass es R sein soll, selbst wenn die Datei mit dem Suffix .R oder .r endet. Das #! teilt der Befehlszeile mit, welche Sprache in der Datei enthalten ist.
Spacedman

4
Ich habe hier im Laufe der Jahre einige Fragen gestellt und konnte sowohl auf Littler als auch auf Rscript verweisen. Die Hauptsache ist, den Leuten zu sagen, wie Sie es getan haben, das R CMD BATCHist schrecklich. Alles andere als das ...
Dirk Eddelbuettel

@Dason Ich arbeite auch mit R-Skript und ich versuche, R-Skript von Java-Programm auszuführen, und ich sehe einen Fehler. Hier ist meine Frage . Sehen Sie, ob Sie helfen können. Ich verwende vorerst Ihr Hallo-Funktionsbeispiel, um es einfach zu machen.
user1950349

Gibt es eine Möglichkeit, den Bibliothekspfad im Befehl selbst zu ändern? Ähnliches wieR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes

@mikemtnbikes Nicht das ich wüsste. Man könnte immer etwas hinzufügen, um die .libPaths () im Skript zu ändern. Aber ich sehe keine solche Option, auf die in der Manpage für Rscript hingewiesen wird.
Dason

107

Dies beantwortet die Frage nicht direkt. Aber jemand könnte hier landen, weil er einen Oneliner von R vom Terminal aus ausführen möchte. Wenn Sie beispielsweise nur einige fehlende Pakete installieren und beenden möchten, kann dieser Oneliner sehr praktisch sein. Ich benutze es oft, wenn ich plötzlich herausfinde, dass ich einige Pakete vermisse und sie dort installieren möchte, wo ich will.

  • So installieren Sie am Standardspeicherort:

    R -e 'install.packages(c("package1", "package2"))'
  • So installieren Sie an einem Speicherort, für den rootBerechtigungen erforderlich sind :

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 

5
Um einen Befehl auszuführen, können Sie ihn auch Rscript -e "getwd()"im Terminal verwenden. Rscript druckt nur die Befehlsausgabe und nicht die vollständige R-Startnachricht.
Paul Rougieux

Sie können auch verwenden, r -e "cat(getwd(),'\n')"wenn Sie weniger installiert haben. In dieser Antwort erklärt Dirk Eddelbuettel den Unterschied zwischen Littler und Rscript.
Paul Rougieux

2
Vielen Dank, dass Sie mein Problem vorweggenommen haben! Ich brauchte noch eine Sache:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin

4
Dies sollte verwendet R -r 'options(warn=2); install...'werden, um die Ausführung anzuhalten und einen Fehlercode ungleich Null zu erhalten, falls die Installation fehlschlägt. Ansonsten sind install.packagesFehler nur Warnungen.
Rvernica


21

Sie benötigen den ?RscriptBefehl, um ein R-Skript vom Terminal aus auszuführen.

Überprüfen Sie http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Beispiel

## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()

Dies war nur ein Beispiel dafür, wie Sie ein R-Skript schreiben / ausführen, in Ihrer Datei das #! / Path / to / rscript hinzufügen und dann chmod + x <Ihr Skript.r> und ./< Ihr Skript.r>
Mehul Rathod

10

So führen Sie Rmd im Befehl mit knitr und rmarkdown mit mehreren Befehlen aus und laden dann eine HTML-Datei in RPubs hoch

Hier ein Beispiel: Laden Sie zwei Bibliotheken und führen Sie einen R-Befehl aus

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'

3
Beachten Sie, dass das Laden der Bibliothek einfacher übersprungen wird. R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
Gregmacfarlane

3

Eine weitere Möglichkeit, Rscript für * Unix-Systeme zu verwenden, ist die Prozessersetzung .

Rscript <(zcat a.r)
# [1] "hello"

Dies entspricht natürlich der akzeptierten Antwort, ermöglicht es Ihnen jedoch, Ihre Datei zu bearbeiten und auszuführen, ohne die Leistung der Befehlszeile zu sparen, z.

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

Ähnlich lässt Rscript -e "Rcode"es sich auch ausführen, ohne in einer Datei zu speichern. Es kann also in Verbindung mit Skripten verwendet werden, die R-Code generieren, z.

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa

3

Nur zur Dokumentation müssen Sie das Skript manchmal wie folgt ausführen sudo:

sudo Rscript path/to/your/file.R

2
Wann müssen Sie das tun?
Simplegamer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.