web-dev-qa-db-fra.com

La définition du répertoire de travail dans knitr avec opts_chunk $ set (root.dir = ...) ne fonctionne pas

Mon projet R est structuré comme un paquet contenant les répertoires /R, /vignettes, /data etc. Dans l'un de mes documents Rmd dans /vignettes, je source un script qui se trouve dans /R. Dans ce script, j'utilise read.csv() pour charger un fichier situé dans inst/extdata/.
Le problème est que par défaut, le répertoire de travail du fichier Rmd est celui où se trouve le fichier. Appelons-le /Users/Me/Docs/Proj/vignettes. Cependant, pour que le script R puisse être exécuté, le répertoire de travail doit être le répertoire principal du projet (/Users/Me/Docs/Proj).
J'ai essayé de changer le répertoire de travail dans le fichier Rmd en utilisant knitr::opts_chunk$set(root.dir = normalizePath(".."). Cependant apparemment ce ne change pas le répertoire de travail car si j'appelle getwd() après, la sortie est toujours /Users/Me/Docs/Proj/vignettes alors que knitr::chunk_opts$get("root_dir") renvoie /Users/Me/Docs/Proj

Voici un exemple de fichier Rmd minimal: 

```{r}
getwd()  # returns 'Users/Me/Docs/Proj/vignettes'
knitr::opts_chunk$set(root.dir = normalizePath(".."))  # should change the working directory to 'Users/Me/Docs/Proj'
getwd()  # again returns 'Users/Me/Docs/Proj/vignettes'
knitr::opts_chunk$get("root.dir")  # returns 'Users/Me/Docs/Proj'
```

J'utilise RStudio Version 0.99.435. Voici mes infos de session: 

R version 3.2.0 (2015-04-16)  
Platform: x86_64-Apple-darwin14.3.0 (64-bit)  
Running under: OS X 10.10.3 (Yosemite)  

locale:
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] htmltools_0.2.6 tools_3.2.0     yaml_2.1.13     rmarkdown_0.6.1 digest_0.6.8   

Toute aide est aimablement appréciée. Si vous avez besoin de plus d’informations, postez un commentaire sur la question. Merci d'avance!

14
Tommy

C'est knitr::opts_knit au lieu de knitr::opts_chunk.

24
Yihui Xie

Comme Yihui a souligné dans sa réponse, l’erreur était simplement que j’avais utilisé opts_chunk$set() au lieu de opts_knit$set().
Toutefois, il peut être intéressant de noter que la modification du répertoire de travail n’affecte pas le bloc actuel, mais seulement le bloc suivant. Alors e. g. si vous voulez charger des données relatives au nouveau répertoire de travail, faites-le dans le bloc suivant.

8
Tommy

Si vous avez un projet R avec des sous-dossiers imbriqués, de sorte que les fichiers .Rproj et .Rmd soient situés dans des dossiers différents, vous pouvez utiliser la commande rprojroot::find_rstudio_root_file() pour rechercher et définir le répertoire de travail dans le dossier principal du projet lors de Kniting (au lieu du dossier). contenant le fichier de code rMarkdown).

Donc, utilisez au minimum les éléments suivants:

```{r setup}

knitr::opts_knit$set(root.dir = rprojroot::find_rstudio_root_file())

```

dans le bloc setup

Voir aussi Recherche automatique du chemin du projet R actuel dans R Studio et https://support.rstudio.com/hc/en-us/community/posts/220826588-Working-directory-in-R- Des cahiers

6
JWilliman

Quelques détails sur la mise en place du répertoire de travail par root.dir =.
Bien qu'il y ait déjà quelques réponses impressionnantes de Yihui et Tommy . Je me suis toujours retrouvé coincé dans le répertoire de travail. J'essaie donc de donner une réponse complète ici. 

  1. De documentation knitr :

Les paramètres de Knitr doivent être définis dans un bloc avant les morceaux qui dépendent de ces paramètres pour être actifs. Il est recommandé de créer un bloc de configuration de tricot en tant que premier fragment d'un script avec cache = FALSE et include = FALSE ensemble d'options. Ce bloc ne doit contenir aucune commande qui s'attend à ce que les paramètres du bloc de configuration soient effectifs au moment de l'exécution. 

  1. Mon exemple de code: 

Dans mon cas, les fichiers .Rproj et .Rmd se trouvent dans le même dossier. 

```{r setup, include=FALSE, cache = FALSE}
require("knitr")
## setting working directory
opts_knit$set(root.dir = "~/Documents/R/Example")
```
1
Guannan Shen