161 votes

Commande R pour définir le répertoire de travail à l'emplacement du fichier source dans Rstudio

J'élabore des tutoriels en R. Chaque code R est contenu dans un dossier spécifique. Il contient des fichiers de données et d'autres fichiers. Je veux ouvrir le .r et le source de telle sorte que je ne doive pas changer le répertoire de travail dans Rstudio comme indiqué ci-dessous :

enter image description here

Existe-t-il un moyen de spécifier automatiquement mon répertoire de travail dans R ?

111voto

Richie Cotton Points 35365

Pour obtenir l'emplacement d'un script en cours de sourcing, vous pouvez utiliser utils::getSrcDirectory o utils::getSrcFilename . Ainsi, changer le répertoire de travail pour celui du fichier courant peut être fait avec :

setwd(getSrcDirectory()[1])

Cela ne fonctionne pas dans RStudio si vous Exécuter le code plutôt que Fuente le faire. Pour cela, vous devez utiliser rstudioapi::getActiveDocumentContext .

setwd(dirname(rstudioapi::getActiveDocumentContext()$path))

Cette deuxième solution nécessite que vous utilisiez RStudio comme IDE, bien sûr.

65voto

BumbleBee Points 948

Je sais que cette question est dépassée, mais je cherchais également une solution à ce problème et Google l'a listée en tête de liste :

this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)

mettez-le quelque part dans le fichier (le mieux serait au début, cependant), de sorte que le wd soit modifié en fonction de ce fichier.

D'après les commentaires, cela ne fonctionne pas forcément sur toutes les plateformes (Windows semble fonctionner, Linux/Mac pour certains). Gardez à l'esprit que cette solution permet de "sourcer" les fichiers, et pas nécessairement d'exécuter des morceaux dans ce fichier.

voir aussi récupérer le nom et le chemin du fichier `source`d

9voto

gagarine Points 1165

Para rstudio vous pouvez automatiquement définir votre répertoire de travail dans le répertoire script en utilisant rstudioapi comme ça :

library(rstudioapi)

# Getting the path of your current open file
current_path = rstudioapi::getActiveDocumentContext()$path 
setwd(dirname(current_path ))
print( getwd() )

Cela fonctionne lors de l'exécution ou du sourcing de votre fichier.

Vous devez d'abord installer le paquet rstudioapi. Remarquez que j'imprime le chemin pour être sûr à 100% d'être au bon endroit, mais c'est facultatif.

8voto

Juan Pueyo Points 116
dirname(rstudioapi::getActiveDocumentContext()$path)

fonctionne pour moi mais si vous ne voulez pas utiliser rstudioapi et que vous n'êtes pas dans un proyect, vous pouvez utiliser le symbole ~ dans votre chemin. Le symbole ~ fait référence au répertoire de travail par défaut de RStudio (du moins sous Windows).

RStudio options

Si votre répertoire de travail RStudio est "D:/Documents", setwd("~/proyect1") est identique à setwd("D:/Documents/proyect1").

Une fois que vous avez défini cela, vous pouvez naviguer vers un sous-répertoire : read.csv("DATA/mydata.csv") . Est le même que read.csv("D:/Documents/proyect1/DATA/mydata.csv") .

Si vous voulez naviguer vers un dossier parent, vous pouvez utiliser "../" . Par exemple : read.csv("../olddata/DATA/mydata.csv") qui est identique à read.csv("D:/Documents/oldata/DATA/mydata.csv")

C'est la meilleure façon pour moi de coder des scripts, quel que soit l'ordinateur que vous utilisez.

6voto

sietemonos Points 101

Cette réponse peut vous aider :

script.dir <- dirname(sys.frame(1)$ofile)

Note : script doit être sourcé afin de retourner le chemin correct.

Je l'ai trouvé dans : https://support.rstudio.com/hc/communities/public/questions/200895567-can-user-obtain-the-path-of-current-Project-s-directory-

La réponse du BumbleBee (avec parent.frame au lieu de sys.frame) ne fonctionne pas pour moi, j'obtiens toujours une erreur.

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