web-dev-qa-db-fra.com

Exécution du code R à partir de la ligne de commande (Windows)

J'ai du code R dans un fichier appelé analyse.r. J'aimerais pouvoir, à partir de la ligne de commande (CMD), exécuter le code dans ce fichier sans avoir à passer par le terminal R et j'aimerais aussi pouvoir passer des paramètres et les utiliser dans mon code, quelque chose comme le pseudocode suivant:

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

et cela exécuterait le script et transmettrait "C:\fichier.txt" en tant que paramètre au script, puis il pourrait l'utiliser pour effectuer d'autres traitements.

Comment puis-je accomplir ceci?

22
ExtremeCoder
  1. Vous voulez Rscript.exe.

  2. Vous pouvez contrôler la sortie depuis le script - voir sink() et sa documentation.

  3. Vous pouvez accéder aux arguments de commande via commandArgs().

  4. Vous pouvez contrôler les arguments de ligne de commande plus précisément via les packages getopt et optparse .

  5. Si tout le reste échoue, envisagez de lire les manuels ou documentation fournie

28
Dirk Eddelbuettel

Identifiez où R est installé. Pour la fenêtre 7, le chemin pourrait être

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

Il existe deux manières d’exécuter un script R à partir de la ligne de commande (shell Windows ou Linux).

1) R CMD manière R CMD BATCH suivi de R nom du script. La sortie de ceci peut également être transmise à d’autres fichiers si nécessaire.

Cependant, cette méthode est un peu ancienne et l'utilisation de Rscript devient de plus en plus populaire.

2) Manière Rscript (Ceci est pris en charge sur toutes les plateformes. L’exemple suivant n’est cependant testé que pour Linux) Cet exemple implique le chemin de chemin du fichier csv, le nom de la fonction et l’attribut (row ou column) index du fichier csv sur lequel cette fonction devrait fonctionner.

Contenu du fichier test.csv X1, x2 1,2 3,4 5,6 7,8

Composez un fichier R “a.R” dont le contenu est

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

Exécuter ce qui suit sur le shell Linux Rscript aR /home/impadmin/test.csv cols 1 Donne à Que vous avez passé ce qui suit à la ligne de commande /Home /impadmin/test.csv colonnes 1 La matrice est: x1 x2 1 1 2 2 3 4 3 5 6 4 7 8 Les dimensions de la matrice sont 4 2 Cette fonction affichera la somme de la colonne dont l'index est passé du traitement en ligne de commande ... sommes de colonne 16

Exécuter ce qui suit sur le shell Linux Rscript aR /home/impadmin/test.csv rangées 2 Donne Que vous avez passé ce qui suit à la ligne de commande /Home /impadmin/test.csv rangées 2 La matrice est: x1 x2 1 1 2 2 3 4 3 5 6 4 7 8 Les dimensions de la matrice sont 4 2 Cette fonction affichera la somme de la ligne dont l'index est passé à partir du traitement en ligne de commande ... montants des lignes 7

Nous pouvons également rendre le script R exécutable comme suit (sous Linux) Chmod a + x aR Et réexécuter le deuxième exemple sous ./AR/home/impadmin/test rangs .csv 2

Cela devrait également fonctionner pour l'invite de commande windows.

3
rupali

enregistrer ce qui suit dans un fichier texte

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

Non, exécutez la commande suivante dans Windows cmd

Rscript.exe path_to_file "hello" "world"

Ceci imprimera le suivant

[1] "hello"
[1] "world"
0
Manideep Karthik