web-dev-qa-db-fra.com

Erreur "impossible d'ouvrir la connexion" lors de l'exécution de "knit HTML" dans RStudio

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.

16
Praveen Kishor

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.

  • Essayez de spécifier le chemin absolu du fichier (pas très robuste, mais pratique dans certains cas).
  • Déterminez le chemin relatif du fichier. Si vous avez votre fichier .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.
19
Roman Luštrik

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'))
5
Bangyou

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:

 enter image description here

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:

  • 1) Pour le fichier *.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/')
```
  • 2) Pour le script *.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.

1
Valentin

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")
````
0
Hugo Zaragoza

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.

0
dmt