J'utilise R CMD BATCH my_script.R
depuis un terminal pour exécuter un R
script. J'en suis maintenant au point où je voudrais passer un argument à la commande, mais j'ai des problèmes pour le faire fonctionner. Si je le fais R CMD BATCH my_script.R blabla
alors blabla
devient le fichier de sortie, plutôt que d'être interprété comme un argument disponible pour le script R en cours d'exécution.
J'ai essayé Rscript my_script.R blabla
ce qui semble passer blabla
correctement en argument, mais je n'obtiens pas le my_script.Rout
fichier de sortie avec lequel j'obtiens R CMD BATCH
(je veux le .Rout
fichier). Bien que je puisse rediriger la sortie d'un appel vers Rscript
un nom de fichier de mon choix, je n'obtiendrais pas les commandes d'entrée R incluses dans le fichier de la même manière R CMD BATCH
que dans le .Rout
fichier.
Donc, idéalement, je cherche un moyen de passer des arguments à un script R exécuté via la R CMD BATCH
méthode, mais je serais heureux avec une approche utilisant Rscript
s'il existe un moyen de le faire produire un .Rout
fichier comparable .
R CMD BATCH
c'est une relique. Ce que j'aime, c'est qu'il produit un.Rout
fichier qui comprend non seulement la sortie du script, mais également entrelace les commandes d'entrée / commentaires du.R
fichier de script qui a produit cette sortie.R CMD BATCH
.R CMD BATCH
qu'avecknitr
, par exempleRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(vous pouvez remplacerstitch
parstitch_rhtml
oustitch_rmd
, et vous devez installer àknitr
partir de Github puisque je viens de trouver un bogue dansstitch
...)Rscript myfile.R > path/to/mylog.Rout
et au lieu d'être imprimé sur stdout (l'écran), la sortie du fichier est enregistrée dans votre.Rout
fichier.Rscript myfile.R | tee mylog.Rout
Après avoir essayé les options décrites ici, j'ai trouvé cet article de Forester dans r-bloggers. Je pense que c'est une option propre à considérer.
J'ai mis son code ici:
Depuis la ligne de commande
Test.R
Dans test.out
Merci à Forester !
la source
--args
c'est la clé. Il fonctionne également avecR --no-save --no-restore --args a=1 < test.R
etR --no-save --no-restore < test.R --args a=1
Dans votre script R, appelé
test.R
:À partir de la ligne de commande, exécutez:
Votre fichier de sortie, test.Rout, montrera que l'argument
4
a été passé avec succès à R:la source
Vous devez mettre des arguments avant
my_script.R
et utiliser-
sur les arguments, par exemplecommandArgs()
recevra-blabla
sous forme de chaîne de caractères dans ce cas. Consultez l'aide pour plus de détails:la source
args <- commandArgs(FALSE)
, puis imprimer args, je me retrouve avec tous les arguments, y compris ceux qui ne sont pas à moi, comme--restore
,--save
etc. Si jecommandArgs(TRUE)
je reçois aucun argument. Existe-t-il un moyen d'obtenir uniquement mes propres arguments supplémentaires?--args
semble prometteur, mais je n'ai pas été en mesure de le faire fonctionner ...J'ajoute une réponse car je pense qu'une solution en une ligne est toujours bonne! Au sommet de votre
myRscript.R
fichier, ajoutez la ligne suivante:Ensuite, soumettez votre script avec quelque chose comme:
Par exemple:
Ensuite:
la source
Voici une autre façon de traiter les arguments de ligne de commande, en utilisant
R CMD BATCH
. Mon approche, qui s'appuie sur une réponse précédente ici , vous permet de spécifier des arguments en ligne de commande et, dans votre script R, de leur donner certaines ou toutes les valeurs par défaut.Voici un fichier R, que je nomme test.R :
Sur la ligne de commande, si je tape
alors dans R nous aurons
a
=2
etb
=c(2,5,6)
. Mais je pourrais dire, omettreb
et ajouter un autre argumentc
:Ensuite, dans R, nous aurons
a
=2
,b
=c(1,1,1)
(la valeur par défaut) etc
="hello"
.Enfin, pour plus de commodité, nous pouvons envelopper le code R dans une fonction, tant que nous faisons attention à l'environnement:
la source