Il est très pratique d'avoir des scripts R pour faire des graphiques simples à partir de la ligne de commande. Cependant, exécuter R à partir de scripts bash n'est pas du tout pratique. L'idéal pourrait être quelque chose comme
#!/path/to/R
...
ou
#!/usr/bin/env R
...
mais je n'ai pas réussi à faire fonctionner l'un ou l'autre de ces éléments.
Une autre option consiste à conserver les scripts uniquement dans R, par exemple script.R
, et à les invoquer avec R --file=script.R
ou similaire. Cependant, parfois, un script s'appuiera sur des commutateurs de ligne de commande obscurs à quel point une partie du code existe en dehors du script. Exemple: en glissant des choses dans R à partir de bash via un profil .R local, les commutateurs souhaités sont alors tout ce que cela --vanilla
implique sauf --no-init-file
.
Une autre option est un script bash pour stocker les indicateurs R et être exécutable sans douleur, qui appelle ensuite le script R. Le problème est que cela signifie qu'un seul programme vient d'être divisé en deux fichiers qui doivent maintenant être synchronisés, transférés ensemble sur de nouvelles machines, etc.
L'option que je méprise le moins actuellement consiste à intégrer le R dans un script bash:
#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT
Tout est dans un seul fichier. Il est exécutable et gère facilement les arguments. Le problème est que combiner bash et R comme ça élimine à peu près la possibilité que n'importe quel IDE n'échoue pas sur l'un ou l'autre, et me fait vraiment mal au cœur.
Y a-t-il une meilleure façon de me manquer?
Rscript --help
partir de la ligne de commande listera de nombreuses options utiles qui peuvent être ajoutées au shebang, telles que--vanilla
.commandArgs
fonction et les packagesgetopt
etoptparse
pour analyser la ligne de commande. Pour que les arguments et les options puissent également être transmis à vos scripts lors de l'exécution à partir de la ligne de commande.#!/usr/bin/Rscript
(ce qui n'est pas la pratique standard pour les scripts R).Essayez plus petit .
littler
fournit une capacité de hachage (c'est-à-dire un script commençant par #! / some / path) pour GNU R, ainsi qu'une utilisation simple de la ligne de commande et du piping.la source
La réponse de Miguel Sanchez est ce qu'elle devrait être. L'autre façon d'exécuter Rscript pourrait être la commande 'env' pour exécuter RScript à l'échelle du système.
la source
env
vous permettrait plutôt d'exécuter le premierRscript
trouvé dans le vôtre$PATH
, permettant ainsi à quelqu'un d'exécuter réellement autre chose qu'un système par défautRscript
(qui ne peut pas être installé/usr/whatever
). Je recommanderais d'utiliserenv
forR
andRscript
stuff, car ceux-ci en particulier peuvent ne pas être installés dans des endroits standard. (Lesbash
scripts ordinaires peuvent cependant toujours être utilisés en toute sécurité#!/bin/bash
.)/bin/sh
. Tout le reste doit utiliser laenv
recherche. En particulier, le plus souvent, Bash est obsolète sur les clusters de calcul et les utilisateurs ont leurs propres installations personnalisées (généralement dans~/.local/bin
, ou partagées dans quelque chose comme un/software
montage NFS). De même, sur macOS,/bin/bash
est toujours obsolète en raison de problèmes de licence, et un Bash à jour est plus couramment situé à/usr/local/bin/bash
(je me rends compte que votre commentaire a 3 ans mais c'est assez important.)/bin/sh
n'est, en aucun cas, également "dangereuse", alors vous devez admettre que l'on pourrait en dire autant/bin/bash
. L'utilisationenv
est plus imprévisible, en raison dePATH
paramètres fiables / incohérents pour différents utilisateurs, mais chaque utilisateur R peut en fait vouloir ce comportement, contrairement auxbash
scripts. Enfin, pour CI / cloud invoquant des scripts bash plus récents, appelez-les simplement en utilisant/path/to/my/bash myscript
ou définissez explicitement le chemin et appelez-les en utilisantenv script
. EOT#!/path/to/R
ne fonctionnera pas car R est lui-même un script, doncexecve
malheureux.j'utilise
R --slave -f script
la source
Rscript
(etlittler
), au cas où vous vous poseriez la question.Si vous souhaitez analyser les arguments de ligne de commande dans un script R, essayez RScript qui est fourni avec R à partir de la version 2.5.x
http://stat.ethz.ch/R-manual/R-patched/library/utils/html/Rscript.html
la source
Cela marche,
mais je ne sais pas ce qui se passe si vous avez plus d'une version de R installée sur votre machine.
Si tu le fais comme ça
il dit à l'interpréteur d'utiliser simplement ce que R apparaît en premier sur votre chemin.
la source
Si le programme que vous utilisez pour exécuter votre script a besoin de paramètres, vous pouvez les mettre à la fin du #! ligne:
Ne connaissant pas R, je ne peux pas tester correctement, mais cela semble fonctionner:
la source
Juste une note à ajouter à ce post. Les versions ultérieures de
R
semblent avoirRscript
quelque peu enterré . Pour R 3.1.2-1 sur OSX téléchargé en janvier 2015, j'ai trouvéRscript
dansDonc, au lieu de quelque chose comme
#! /sw/bin/Rscript
, j'avais besoin d'utiliser ce qui suit en haut de mon script.Cela
locate Rscript
pourrait vous être utile.la source
#!/usr/bin/env Rscript
au lieu d'un chemin d'accès codé en dur dans lesR
scripts (et d'ajouter ce long chemin à votre$PATH
)Vous voudrez peut-être utiliser le module rpy2 de python. Cependant, la «bonne» façon de procéder est d'utiliser R CMD BATCH. Vous pouvez le modifier pour écrire dans STDOUT, mais la valeur par défaut est d'écrire dans un fichier .Rout. Voir l'exemple ci-dessous:
Remarque: vous voudrez essayer les options --vanilla et d'autres pour supprimer toutes les erreurs de démarrage.
la source
Essayez smallR pour écrire des scripts R rapides dans la ligne de commande:
http://code.google.com/p/simple-r/
(
r
commande dans le répertoire)Le traçage à partir de la ligne de commande en utilisant smallR ressemblerait à ceci:
la source
littler
serait certainement préféré (puisqu'il est toujours vivant); ou, utilisez simplementRscript
(qui est sorti aprèslittler
sa création.)Ce qui suit fonctionne pour moi en utilisant MSYS bash sur Windows - je n'ai pas R sur ma machine Linux, je ne peux donc pas l'essayer là-bas. Vous avez besoin de deux fichiers - le premier appelé runr exécute R avec un paramètre de fichier
Vous devez rendre cet exécutable avec chmod + x runr .
Puis dans votre fichier script:
Noter la #! La ligne runr peut avoir besoin d'inclure le chemin complet de runr, selon la façon dont vous utilisez la commande, la façon dont votre variable PATH est définie, etc.
Pas joli, mais ça a l'air de marcher!
la source