Je reçois l'erreur ci-dessous lorsque j'essaie de "tricoter du HTML" dans RStudio.
|................................ | 50%
ordinary text without R code
|.................................................................| 100%
processing file: Preview-b0c112a265.Rmd
label: unnamed-chunk-1
Quitting from lines 16-26 (Preview-b0c112a265.Rmd)
Error in file(file, "rt") : cannot open the connection
Calls: <Anonymous> ... withVisible -> eval -> eval -> read.csv -> read.table -> file
Execution halted
J'utilise RStudio sur une machine win8 64 bits.
Lorsque vous exécutez "Knit HTML", le code essaie de trouver le fichier que vous lisez dans le même répertoire que celui où se trouve .Rmd
car knitr
définit le répertoire de travail sur ce chemin. Autant que je sache, vous avez deux options.
.Rmd
dans /
et vos données dans /data
, le chemin relatif doit être, par exemple, read.table("./data/myfile.csv"...)
. .
signifie "ici" (où que se trouve la getwd()
), deux points gravissent la structure de répertoires vers le haut tout en spécifiant des répertoires qui les descendent.Parfois, cela est gênant pour le chemin d’exécution du fichier Rmd, en particulier lorsque le fichier rmd n’est pas stocké dans le dossier racine d’un projet. Je stocke normalement rmd dans le dossier Report pour éviter tous les fichiers temporaires de la racine du projet (par exemple Report/myreport.Rmd).
Par exemple, il existe un fichier myfile.csv dans le dossier Ressources. Dans le fichier rmd, je dois utiliser deux points pour spécifier le chemin du fichier:
read.csv('../Resources/myfile.csv')
Mais le chemin du fichier n'est pas correct si je veux tester mon code dans la console d'un projet Rstudio, car le répertoire de travail normal est le dossier racine du projet. J'ai donc besoin de supprimer deux points du chemin du fichier:
read.csv('Resources/myfile.csv')
J'ai écrit une fonction simple pour résoudre ce problème pour moi-même ( https://github.com/byzheng/rproject ). La fonction project_filepath générera un nouveau chemin relatif au dossier racine du projet. Le répertoire de travail peut donc être n’importe quel sous-dossier d’un projet. Le code ci-dessous fonctionnera pour le fichier Rmd et la console.
library(rproject)
read.csv(project_filepath('Resources/myfile.csv'))
Ce qui suit a fonctionné pour moi - si vous avez votre projet (disons, un répertoire nommé my_project
) organisé de la manière suivante:
Et dans le dossier scripts
vous avez un fichier *.Rmd
(*.rmd
) ou un script *.R
(*.r
) que vous souhaitez tricoter/compiler en tant que rapport HTML (CTRL + SHIFT + K
à partir de RStudio), puis vous avez les options suivantes:
*.Rmd
uniquement, il est possible de définir le chemin d'accès à votre répertoire de travail en haut du fichier (voir la note Remarque dans l'aide de knitr::knit
):```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = '../')
# Or use multiple `../` if needed;
# One `../` means go one level up towards the root,
# here, moving from `scripts` folder to the root `my_project`
```
ou utilisez le chemin absolu; mais pas encouragé si vous partagez votre répertoire/référentiel avec des collègues (sous Windows, quelque chose comme C:/my/absolute/path/to/my_project
ne fonctionnera pas sur un autre ordinateur et échouera également sur le vôtre si vous déplacez my_project
)
```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = 'absolute/path/to/my_project/')
```
*.R
et le fichier *.Rmd
(bien que cela ne soit pas recommandé dans le Remarque de l'aide de knitr::knit
) - vous pouvez mettre en haut de votre script *.R
ou dans le bloc de code de votre fichier *.Rmd
(où vous lisez des données) quelque chose comme:setwd(gsub(pattern = '/scripts', replacement = '', x = getwd()))
Si vous exécutez/exécutez le script *.R
sans compilation (par exemple lors du test du script), il ne modifiera pas le chemin getwd()
habituel car il ne trouve pas le modèle /scripts
. Lors de la compilation en HTML, il modifiera le chemin du répertoire de travail en supprimant la partie /scripts
de path/to/my_project/scripts
Ces deux options vous permettront de continuer à utiliser des chemins relatifs tels que:
read.csv('data/my_data.csv')
éviter quelque chose comme:
read.csv('../data/my_data.csv')
ce qui peut être délicat si vous voulez tester vos scritps avant de les compiler en rapports HTML.
Vous devez définir des chemins absolus ou relatifs par rapport au dossier de votre projet, comme le mentionnent d’autres auteurs. Vous pouvez également setwd (chemin).
Mais cela ne me suffit pas. Pour une raison quelconque, je constate que je dois charger toutes mes données sur le tout premier bloc de commandes R dans le fichier .Rmd, sinon je reçois la même erreur que vous.
En d'autres termes:
```{r}
setwd("/tmp/report")
# This load works
data1 <- read.csv("your_file.csv", sep = "\t")
````
some markdown text here ...
```{r}
# This load does not work, even if I do a setwd just before:
data1 <- read.csv("your_file.csv", sep = "\t")
````
Pour moi, il s'agissait simplement de ne pas encore enregistrer mon fichier .Rmd ... Comme indiqué ci-dessus, le code tente de trouver le fichier dans le même répertoire que celui où se trouve .Rmd, et le fichier .Rmd n'existe pas , vous pourriez avoir cette erreur.