289 votes

Comment puis-je lire les paramètres de ligne de commande à partir d'un script R?

J'ai un script R pour lequel j'aimerais être en mesure de fournir plusieurs paramètres de ligne de commande (plutôt que de coder en dur les valeurs de paramètre dans le code lui-même). Le script s'exécute sur Windows.

Je ne peux pas trouver d'info sur la façon de lire les paramètres fournis sur la ligne de commande dans mon script R. Je serais surpris si elle ne peut pas être fait, alors peut-être je ne suis pas en utilisant les meilleurs mots-clés dans ma recherche Google...

Tous les pointeurs ou des recommandations?

211voto

Marek Points 18000

Dirk réponse est tout ce dont vous avez besoin. Je vous donne petit exemple.

J'ai fait deux fichiers: exmpl.bat et exmpl.r.

  • exmpl.bat:

    set R_Script="C:\Program Files\R-3.0.2\bin\RScript.exe"
    %R_Script% exmpl.R 2010-01-28 example 100 > exmpl.batch 2>&1
    

    Alternativement, à l'aide de Rterm.exe:

    set R_TERM="C:\Program Files\R-3.0.2\bin\i386\Rterm.exe"
    %R_TERM% --no-restore --no-save --args 2010-01-28 example 100 < exmpl.R > exmpl.batch 2>&1
    
  • exmpl.r:

    options(echo=TRUE) # if you want see commands in output file
    args <- commandArgs(trailingOnly = TRUE)
    print(args)
    # trailingOnly=TRUE means that only your arguments are returned, check:
    # print(commandsArgs(trailingOnly=FALSE))
    
    start_date <- as.Date(args[1])
    name <- args[2]
    n <- as.integer(args[3])
    rm(args)
    
    # Some computations:
    x <- rnorm(n)
    png(paste(name,".png",sep=""))
    plot(start_date+(1L:n), x)
    dev.off()
    
    summary(x)
    

Enregistrez les deux fichiers dans le même répertoire et lancez exmpl.bat. En conséquence, vous avez:

  • example.png avec certains de la parcelle
  • exmpl.batch avec tout ce qui a été fait

Juste pour ajouter un - vous pouvez ajouter la variable d'environnement %R_Script%:

"C:\Program Files\R-3.0.2\bin\RScript.exe"

et l'utiliser dans vos scripts, comme %R_Script% .......

Les différences entre RScript et Rterm:

128voto

Dirk Eddelbuettel Points 134700

Quelques points:

  1. Paramètres de ligne de commande accessible via commandArgs(), de sorte voir help(commandArgs) pour un vue d'ensemble.

  2. Vous pouvez utiliser Rscript.exe sur toutes les plateformes, y compris Windows. Il soutiendra commandArgs(). littler pourrait être porté sur Windows, mais qui vit maintenant uniquement sur OS X et Linux.

  3. Il y a deux packages supplémentaires sur CRAN -- getopt et optparse -- qui ont été écrites pour la ligne de commande de l'analyse.

95voto

Hrishi Mittal Points 426

Ajoutez à cela le haut de votre script:

args<-commandArgs(TRUE)

Ensuite, vous pouvez vous référer aux arguments passés comme args[1], args[2] etc.

Ensuite, exécutez

Rscript myscript.R arg1 arg2 arg3

Si vos arguments sont des chaînes de caractères avec des espaces, placez à l'intérieur de guillemets doubles.

15voto

Erik Aronesty Points 2223

Essayez de bibliothèque(getopt) ... si vous voulez des choses plus sympa. Par exemple:

spec <- matrix(c(
        'in'     , 'i', 1, "character", "file from fastq-stats -x (required)",
        'gc'     , 'g', 1, "character", "input gc content file (optional)",
        'out'    , 'o', 1, "character", "output filename (optional)",
        'help'   , 'h', 0, "logical",   "this help"
),ncol=5,byrow=T)

opt = getopt(spec);

if (!is.null(opt$help) || is.null(opt$in)) {
    cat(paste(getopt(spec, usage=T),"\n"));
    q();
}

11voto

JD Long Points 20477

vous avez besoin de littler (prononcé "peu de r')

Dirk sera dans environ 15 minutes à élaborer ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X