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

je travaille sur quelques tutoriels dans R. chaque code R est contenu dans un dossier spécifique. Il y a des fichiers de données et d'autres fichiers. Je veux ouvrir le .r fichier source et que je n'ai pas à changer le répertoire de travail dans Rstudio comme indiqué ci-dessous:

enter image description here

est - il possible de spécifier automatiquement mon répertoire de travail dans R.

94
demandé sur gagarine 2012-12-02 23:10:27

13 réponses

je sais que cette question est dépassée, mais je cherchais une solution pour cela aussi bien et Google répertorie cela en haut:

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

mettez cela quelque part dans le dossier (le meilleur serait le début, cependant), de sorte que le wd est modifié selon ce dossier.

selon les commentaires, cela pourrait ne pas nécessairement fonctionner sur toutes les plateformes (Windows semble fonctionner, Linux/Mac pour certains). Gardez à l'esprit que cette solution est pour 'sourcing' les fichiers, pas nécessairement pour exécuter des morceaux dans ce fichier.

voir aussi obtenir le nom de fichier et le chemin de " la source avais fichier

50
répondu BumbleBee 2018-06-12 07:21:51

Pour obtenir l'emplacement d'un script source, vous pouvez utiliser utils::getSrcDirectory ou utils::getSrcFilename . Ainsi, changer le répertoire de travail en 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 Source . Pour cela, vous devez utiliser rstudioapi::getActiveDocumentContext .

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

cette seconde solution nécessite que vous utilisiez RStudio comme votre IDE, bien sûr.

34
répondu Richie Cotton 2016-04-15 21:18:06

Cette réponse peut aider:

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

Remarque: le script doit être d'origine afin de retourner chemin d'accès 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 -

Les Bourdons réponse (avec parent.cadre au lieu sys.image) n'a pas fonctionné pour moi, j'ai toujours une erreur.

6
répondu sietemonos 2015-04-25 22:49:57

la solution

dirname(parent.frame(2)$ofile)

ça ne marche pas pour moi.

j'utilise un algorithme de force brute, mais fonctionne:

File <- "filename"
Files <- list.files(path=file.path("~"),recursive=T,include.dirs=T)
Path.file <- names(unlist(sapply(Files,grep,pattern=File))[1])
Dir.wd <- dirname(Path.file)

plus facile lors de la recherche dans un répertoire:

Dirname <- "subdir_name"
Dirs <- list.dirs(path=file.path("~"),recursive=T)
dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1])
5
répondu namu.net 2014-11-21 09:23:19
dirname(rstudioapi::getActiveDocumentContext()$path)

fonctionne pour moi, mais si vous ne voulez pas utiliser rstudioapi et 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 RStudio par défaut (au moins sur Windows).

RStudio options

Si votre RStudio répertoire de travail est "D:/Documents", setwd("~/proyect1") est le même que setwd("D:/Documents/proyect1").

une fois que vous avez paramétré 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 dans un dossier parent, vous pouvez utiliser "../" . Par exemple: read.csv("../olddata/DATA/mydata.csv") qui est le même que 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.

5
répondu Juan Pueyo 2016-12-02 13:01:03

je comprends que c'est périmé, mais je ne pouvais pas obtenir les réponses précédentes à travailler de façon très satisfaisante, donc je voulais apporter ma méthode au cas où quelqu'un d'autre rencontre la même erreur mentionnée dans les commentaires à la réponse de BumbleBee.

Mine est basé sur une commande de système simple. Tout ce que vous donnez à la fonction est le nom de votre script:

extractRootDir <- function(x) {
    abs <- suppressWarnings(system(paste("find ./ -name",x), wait=T, intern=T, ignore.stderr=T))[1];
    path <- paste("~",substr(abs, 3, length(strsplit(abs,"")[[1]])),sep="");
    ret <- gsub(x, "", path);
    return(ret);
}

setwd(extractRootDir("myScript.R"));

La sortie de la fonction ressemblerait à "/Users/you/Path/To/Script" . Espérons que cela aide quelqu'un d'autre qui peut-être obtenu coincé.

2
répondu Tgsmith61591 2015-03-17 16:36:34

je cherchais juste une solution à ce problème, je suis venu à cette page. Je sais que son daté, mais les solutions précédentes où insatisfaisant ou ne fonctionnait pas pour moi. Voici mon travail autour si vous êtes intéressé.

filename = "your_file.R"
filepath = file.choose()  # browse and select your_file.R in the window
dir = substr(filepath, 1, nchar(filepath)-nchar(filename))
setwd(dir)
2
répondu Ryan Liebert 2016-01-24 15:59:33

je me rends compte qu'il s'agit d'un vieux fil, mais j'ai eu un problème similaire avec le besoin de définir le répertoire de travail et ne pouvait obtenir aucune des solutions à travailler pour moi. Voici ce qui a fonctionné, au cas où quelqu'un d'autre trébucherait sur ce plus tard:

# SET WORKING DIRECTORY TO CURRENT DIRECTORY:
system("pwd=`pwd`; $pwd 2> dummyfile.txt")
dir <- fread("dummyfile.txt")
n<- colnames(dir)[2]
n2 <- substr(n, 1, nchar(n)-1)
setwd(n2)

il est un peu alambiqué, mais fondamentalement cela utilise des commandes système pour obtenir le répertoire de travail et le sauver à dummyfile.txt, puis R lit ce fichier en utilisant des données.tableau::fread. Le reste ne fait que nettoyer ce qui a imprimé sur le fichier pour qu'il ne me reste que le chemin du répertoire.

j'avais besoin d'exécuter R sur un cluster, donc il n'y avait aucun moyen de savoir dans quel répertoire je finirais (les jobs se voient attribuer un numéro et un noeud de calcul). Cela a fait l'affaire pour moi.

2
répondu Katie Renwick 2017-06-02 22:52:49

Si vous travaillez sur Linux, vous pouvez essayer ceci:

setwd(system("pwd", intern = T) )

ça me va.

1
répondu Taz 2016-07-01 17:16:08

si vous utilisez rstudio, vous pouvez définir automatiquement votre répertoire de travail au répertoire script en utilisant rstudioapi comme ceci:

library(rstudioapi)

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

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

1
répondu gagarine 2018-05-10 20:49:00

la plupart des interfaces graphiques partent du principe que si vous êtes dans un répertoire et que vous" ouvrez", double-cliquez, ou tentez autrement d'exécuter an .R, que le répertoire dans lequel il réside sera le répertoire de travail, sauf indication contraire. L'interface graphique Mac fournit une méthode pour changer ce comportement par défaut qui est modifiable dans le panneau de préférences de démarrage que vous définissez dans une session en cours d'exécution et qui devient efficace au prochain "démarrage". Vous devriez aussi regarder:

?Startup

La documentation de RStudio dit:

" lorsqu'il est lancé par l'intermédiaire d'une association de fichiers, RStudio place automatiquement le répertoire de travail dans le répertoire du fichier ouvert."La configuration par défaut est que RStudio doit être enregistré en tant que gestionnaire pour .R files, bien qu'il y ait aussi la mention de la possibilité de définir une "association" par défaut avec RStudio for .Rdata et .R extensions. Je ne peux pas dire si le statut "handler" et le statut "association" sont les mêmes sur Linux.

http://www.rstudio.com/ide/docs/using/workspaces

0
répondu 42- 2014-12-29 20:18:56
dirname(parent.frame(2)$ofile)  

ne fonctionne pas pour moi non plus, mais le suivant (comme suggéré dans https://stackoverflow.com/a/35842176/992088 ) fonctionne pour moi sous ubuntu 14.04

dirname(rstudioapi::getActiveDocumentContext()$path)
0
répondu Lamothy 2017-05-23 12:03:07

dans le cas où vous utilisez L'encodage UTF-8:

path <- rstudioapi::getActiveDocumentContext()$path
Encoding(path) <- "UTF-8"
setwd(dirname(path))

, Vous devez installer le paquet rstudioapi si vous ne l'avez pas encore fait.

0
répondu jormaga 2017-06-21 08:45:16