278 votes

Rscript: Déterminer le chemin du script en cours d'exécution

J’ai un script nommé qui inclut un autre script , qui est dans le même répertoire :

Mais je veux de constater que n’importe quel répertoire de travail courant.

En d’autres termes, `` a besoin de connaître sa propre voie. Comment puis-je faire ?

111voto

Ici il y a une solution simple au problème. Cette commande :

retourne le chemin d’accès du fichier de script actuel. Il fonctionne d’après que le script a été sauvegardé.

78voto

Suppressingfire Points 2092

Vous pouvez utiliser l' commandArgs fonction pour obtenir toutes les options qui lui ont été transmis par Rscript à l'effectif de R interprète et de faire des recherches pour --file=. Si votre script est lancé à partir du chemin d'accès ou si elle a été lancée avec un chemin d'accès complet, script.name ci-dessous va démarrer avec un '/'. Sinon, il doit être relatif à l' cwd et vous pouvez concat les deux voies pour obtenir le chemin d'accès complet.

Edit: on dirait que tu avais seulement besoin de l' script.name - dessus et enlever le dernier élément du chemin d'accès. J'ai supprimé les inutiles cwd() de l'échantillon et nettoyé le script principal et posté ma other.R. Enregistrez simplement hors de ce script et l' other.R script dans le même répertoire, chmod +x , et d'exécuter le script principal.

principal.R:

#!/usr/bin/env Rscript
initial.options <- commandArgs(trailingOnly = FALSE)
file.arg.name <- "--file="
script.name <- sub(file.arg.name, "", initial.options[grep(file.arg.name, initial.options)])
script.basename <- dirname(script.name)
other.name <- paste(sep="/", script.basename, "other.R")
print(paste("Sourcing",other.name,"from",script.name))
source(other.name)

d'autres.R:

print("hello")

sortie:

burner@firefighter:~$ main.R
[1] "Sourcing /home/burner/bin/other.R from /home/burner/bin/main.R"
[1] "hello"
burner@firefighter:~$ bin/main.R
[1] "Sourcing bin/other.R from bin/main.R"
[1] "hello"
burner@firefighter:~$ cd bin
burner@firefighter:~/bin$ main.R
[1] "Sourcing ./other.R from ./main.R"
[1] "hello"

C'est ce que je crois dehmann est à la recherche pour.

59voto

steamer25 Points 4224

Je ne pouvais pas la solution de Suppressingfire de travailler quand ' source'ing partir de la console de R.
Je ne pouvais pas obtenir la solution de hadley de travailler lorsque vous utilisez Rscript.

Meilleur des deux mondes ?

38voto

hadley Points 33766
<pre><code></code><p>Ne me demandez pas comment il fonctionne bien, parce que j’ai oublié  :/</p></pre>

13voto

momeara Points 617

Une version amincie de la réponse de Supressingfire :

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