it-swarm.com.de

Ausführen von R-Code über die Befehlszeile (Windows)

Ich habe etwas R-Code in einer Datei namens analyse.r. Ich möchte in der Lage sein, von der Befehlszeile (CMD) aus den Code in dieser Datei auszuführen, ohne das R-Terminal passieren zu müssen. Außerdem möchte ich Parameter übergeben und diese Parameter in meinem Code verwenden wie der folgende Pseudocode:

C:\>(execute r script) analyse.r C:\file.txt

und dies würde das Skript ausführen und "C:\file.txt" als Parameter an das Skript übergeben, und es könnte dann verwendet werden, um es etwas weiter zu bearbeiten.

Wie mache ich das?

22
ExtremeCoder
  1. Sie möchten Rscript.exe.

  2. Sie können die Ausgabe innerhalb des Skripts steuern - siehe sink() und dessen Dokumentation.

  3. Sie können über commandArgs() auf Befehlsargumente zugreifen.

  4. Sie können Befehlszeilenargumente über die Pakete getopt und optparse genauer steuern.

  5. Wenn alles andere fehlschlägt, sollten Sie die Handbücher oder beigestellte Dokumentation durchlesen

28

Identifizieren Sie, wo R installiert ist. Für Fenster 7 könnte der Pfad sein

1.C:\Program Files\R\R-3.2.2\bin\x64>
2.Call the R code
3.C:\Program Files\R\R-3.2.2\bin\x64>\Rscript Rcode.r
5
guns

Es gibt zwei Möglichkeiten, ein R-Skript über die Befehlszeile (Windows oder Linux-Shell) auszuführen.

1) R CMD-Weg R CMD BATCH gefolgt von R-Skriptname. Die Ausgabe davon kann bei Bedarf auch an andere Dateien weitergeleitet werden.

Dieser Weg ist jedoch etwas alt und die Verwendung von Rscript wird immer beliebter.

2) Rscript-Methode (Dies wird auf allen Plattformen unterstützt. Das folgende Beispiel wird jedoch nur für Linux getestet.) In diesem Beispiel werden der Pfad der CSV-Datei, der Funktionsname und das Attribut (Zeile oder Spalte) Index der CSV-Datei, auf die diese Funktion angewendet werden soll.

Inhalt der Datei test.csv X1, x2 1,2 3,4 5,6 7,8

Erstellen Sie eine R-Datei "a.R", deren Inhalt lautet

#!/usr/bin/env Rscript

cols <- function(y){
   cat("This function will print sum of the column whose index is passed from commandline\n")
   cat("processing...column sums\n")
   su<-sum(data[,y])
   cat(su)
   cat("\n")
}

rows <- function(y){
   cat("This function will print sum of the row whose index is passed from commandline\n")
   cat("processing...row sums\n")
   su<-sum(data[y,])
   cat(su)
   cat("\n")
}
#calling a function based on its name from commandline … y is the row or column index
FUN <- function(run_func,y){
    switch(run_func,
        rows=rows(as.numeric(y)),
        cols=cols(as.numeric(y)),
        stop("Enter something that switches me!")
    )
}

args <- commandArgs(TRUE)
cat("you passed the following at the command line\n")
cat(args);cat("\n")
filename<-args[1]
func_name<-args[2]
attr_index<-args[3]
data<-read.csv(filename,header=T)
cat("Matrix is:\n")
print(data)
cat("Dimensions of the matrix are\n")
cat(dim(data))
cat("\n")
FUN(func_name,attr_index)

Wenn Sie Folgendes auf der Linux-Shell ausführen Rscript aR /home/impadmin/test.csv cols 1 , Erhalten Sie , Wenn Sie Folgendes an der Befehlszeile /Home übergeben haben /impadmin/test.csv cols 1 Matrix ist: x1 x2 1 1 2 2 3 4 3 5 6 [.____. .] 4 7 8 Abmessungen der Matrix sind 4 2 Diese Funktion gibt die Summe der Spalte aus, deren Index von der Befehlszeile Übergeben wird. Spaltensummen 16

Wenn Sie Folgendes auf der Linux-Shell ausführen Rscript aR /home/impadmin/test.csv Zeilen 2 , Erhalten Sie , Wenn Sie Folgendes an der Befehlszeile /Home übergeben haben /impadmin/test.csv Zeilen 2 Matrix ist: x1 x2 1 1 2 2 3 4 3 5 6 [.____. .] 4 7 8 Abmessungen der Matrix sind 4 2 Diese Funktion gibt die Summe der Zeile aus, deren Index von der Befehlszeile Übergeben wird. Reihensummen 7

Wir können das R-Skript auch wie folgt ausführbar machen (unter Linux) Chmod a + x aR Und das zweite Beispiel erneut als ./AR/home/impadmin/test ausführen CSV-Zeilen 2

Dies sollte auch für den Windows-Befehl Eingabeaufforderung funktionieren.

3
rupali

speichern Sie Folgendes in einer Textdatei

f1 <- function(x,y){
print (x)
print (y)
}
args = commandArgs(trailingOnly=TRUE)
f1(args[1], args[2])

Führen Sie in Windows cmd den folgenden Befehl aus

Rscript.exe path_to_file "hello" "world"

Dadurch wird Folgendes gedruckt

[1] "hello"
[1] "world"
0