Ligne de commande R transmettant un nom de fichier au script dans les arguments (Windows)
Je vais avoir du mal à passer un nom de fichier pour mon script R. Le fichier est un fichier csv avec le lot des paramètres de plusieurs courses du script. Je suis en train d'essayer de l'inclure ici, de sorte que l'utilisateur n'a pas besoin de modifier le script R pour spécifier l'emplacement du fichier.
Mon Windows syntaxe de ligne de commande est:
R CMD BATCH --slave "--args fn=batch.csv" myscript.r output.txt
Le plus proche que j'ai obtenu à la récupération de cette dans mon script R est en train de faire:
eval(parse(file=commandArgs()[8])))
batch_args = read.table(fn, sep=",")
J'ai expérimenté avec commandArgs(trailingOnly=TRUE)
et parse(text=commandArgs()[8])
etc., avec pas de chance. La plupart des documents que j'ai vu ne s'applique pas spécifiquement à passer des noms de fichier. Quelqu'un peut-il penser à une solution?
source d'informationauteur Benjamin
Vous devez vous connecter pour publier un commentaire.
Comme je l'ai dit dans mon commentaire, je voudrais utiliser
Rscript
au lieu deR CMD BATCH
:où myscript.R contient:
Outre l'utilisation de Rscript (comme Josh dit) vous devez également utiliser le CRAN paquets getopt ou optparse comme ils ont été écrits dans ce but.
Qu'entendez-vous par "pas de chance"? Le nom de fichier est là, dans la commandArgs fonction de (), vous avez juste à travailler sur la façon de l'obtenir. Le Code et les messages d'erreur sont à portée de main.
Ce n'est pas un problème si le seul argument est un nom de fichier, vous connaissez sa position. Ce qui va vous confondre, c'est quand vous commencez à avoir plus complexe argument de passage.
Vous êtes aussi de compliquer les choses avec le passage 'fn=foo.csv'. Il suffit de passer le nom du fichier et l'attribuer à fn dans votre script. Si vous voulez vraiment utiliser la fonction eval, vous aurez probablement besoin de citer votre nom de fichier, ce myscript.r:
et exécuter ainsi:
Des lots.csv est un simple fichier csv.
Que vous pourriez faire une boucle de "ca" dans votre script, et eval tout. C'est un peu dangereux car vous pouvez facilement briser les fonctionnalités de base.
Personnellement, je ferais une boucle sur ca, regardez pour les paires nom=valeur pour un ensemble de noms, et à les définir. Fondamentalement, la mise en œuvre de getopt, mais quelqu'un l'a probablement déjà fait...
essayer