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 ?

5voto

namu.net Points 59

La solution

dirname(parent.frame(2)$ofile)

ne fonctionne pas pour moi.

J'utilise un algorithme de force brute, mais ça marche :

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 annuaire :

Dirname <- "subdir_name"
Dirs <- list.dirs(path=file.path("~"),recursive=T)
dir_wd <- names(unlist(sapply(Dirs,grep,pattern=Dirname))[1])

5voto

Taz Points 2034

Si vous travaillez sous Linux, vous pouvez essayer ceci :

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

Ça marche pour moi.

5voto

Katie Renwick Points 63

Je me rends compte qu'il s'agit d'un vieux fil de discussion, mais j'ai eu un problème similaire avec la nécessité de définir le répertoire de travail et je n'ai pu obtenir aucune des solutions pour moi. Voici ce qui a fonctionné, au cas où quelqu'un d'autre tomberait sur ce problème 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)

C'est un peu compliqué, mais en gros, cela utilise des commandes système pour obtenir le répertoire de travail et le sauvegarder dans le fichier dummyfile.txt, puis R lit ce fichier en utilisant data.table::fread. Le reste n'est qu'un nettoyage de ce qui a été imprimé dans le fichier de sorte que je n'ai plus que le chemin du répertoire.

J'avais besoin d'exécuter R sur un cluster, il n'y avait donc aucun moyen de savoir dans quel répertoire je me retrouverais (les travaux se voient attribuer un numéro et un nœud de calcul). Ceci a fait l'affaire pour moi.

4voto

Will Points 840

El here fournit le here() qui renvoie le répertoire racine de votre projet en se basant sur certaines heuristiques.

Ce n'est pas la solution parfaite, puisqu'elle ne trouve pas l'emplacement du script, mais elle suffit pour certains usages et j'ai pensé la mettre ici.

3voto

Tgsmith61591 Points 1507

Je sais que cette réponse est dépassée, mais je n'ai pas réussi à faire fonctionner les réponses précédentes de manière très satisfaisante. Je voulais donc proposer ma méthode au cas où quelqu'un d'autre rencontrerait la même erreur que celle mentionnée dans les commentaires de la réponse de BumbleBee.

Le mien est basé sur une simple commande système. 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" . J'espère que cela aidera tous ceux qui se sont retrouvés bloqués.

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