it-swarm.com.de

Fehler "Verbindung kann nicht geöffnet werden" bei der Ausführung von "HTML stricken" in RStudio

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, HTML in RStudio zu stricken. 

  |................................                                 |  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

Ich verwende RStudio auf einem 64-Bit-Win8-Computer.

16
Praveen Kishor

Wenn Sie "Knit HTML" ausführen, versucht der Code, die gelesene Datei in demselben Verzeichnis zu finden, in dem sich .Rmd befindet, da knitr das Arbeitsverzeichnis auf diesen Pfad setzt. Soweit ich sehe, haben Sie zwei Möglichkeiten.

  • Geben Sie den absoluten Pfad zur Datei an (nicht sehr robust, aber in manchen Fällen praktisch).
  • Ermitteln Sie den relativen Pfad zur Datei. Wenn sich Ihre .Rmd-Datei in / und Daten in /data befinden, sollte der relative Pfad beispielsweise read.table("./data/myfile.csv"...) sein. . bedeutet "hier" (wo auch immer getwd() ist), zwei Punkte klettern die Verzeichnisstruktur nach oben, während Verzeichnisse die Struktur nach unten klettern.
19
Roman Luštrik

Für den ausführenden Pfad der Rmd-Datei ist dies manchmal ärgerlich, insbesondere wenn die rmd-Datei nicht im Stammordner eines Projekts gespeichert wird. Normalerweise speichere ich rmd im Berichtsordner, um alle temporären Dateien im Projektstammverzeichnis zu vermeiden (z. B. Report/myreport.Rmd). 

Beispielsweise befindet sich im Ordner Ressourcen eine Datei myfile.csv. Ich muss in der rmd-Datei zwei Punkte verwenden, um den Dateipfad anzugeben:

read.csv('../Resources/myfile.csv')

Der Dateipfad ist jedoch nicht korrekt, wenn ich meinen Code in der Konsole eines Rstudio-Projekts testen möchte, da das normale Arbeitsverzeichnis der Stammordner des Projekts ist. Ich muss also zwei Punkte aus dem Dateipfad entfernen:

read.csv('Resources/myfile.csv')

Ich habe eine einfache Funktion geschrieben, um dieses Problem für mich zu lösen ( https://github.com/byzheng/rproject ). Die Funktion project_filepath generiert einen neuen Pfad, der sich auf den Stammordner eines Projekts bezieht. Das Arbeitsverzeichnis kann also ein beliebiger Unterordner in einem Projekt sein. Der folgende Code funktioniert für Rmd-Datei und Konsole.

library(rproject)
read.csv(project_filepath('Resources/myfile.csv'))
5
Bangyou

Ich weiß nicht, seit wann dies Teil der globalen Optionen ist, aber da ich gerade darüber gestolpert bin und es hier nicht geschrieben ist: Unter globale Optionen -> Markdown gibt es eine Einstellung: "Chunks im Verzeichnis auswerten" und wann Sie verwenden "aktuell" oder "Projekt" hat zumindest bei mir funktioniert (anscheinend ist standardmäßig "Dokument" eingestellt)

2
Julius Diel

Folgendes hat für mich funktioniert - wenn Sie Ihr Projekt (etwa ein Verzeichnis mit dem Namen my_project) in etwa wie folgt organisiert haben:

 enter image description here

Und im Ordner scripts haben Sie eine *.Rmd (*.rmd) -Datei oder ein *.R (*.r) -Skript, das Sie als HTML-Bericht (CTRL + SHIFT + K von RStudio) zusammenstellen/kompilieren möchten. Dann haben Sie die Optionen:

```{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`
```

oder benutze den absoluten Pfad; wenn auch nicht ermutigt, wenn Sie Ihr Verzeichnis/Repository mit Kollegen teilen (unter Windows funktioniert C:/my/absolute/path/to/my_project auf keinem anderen Computer und schlägt auf Ihrem Computer fehl, wenn Sie my_project verschieben)

```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = 'absolute/path/to/my_project/')
```
  • 2) Sowohl für das *.R-Skript als auch für die *.Rmd-Datei (obwohl in der Anmerkung der Hilfe von knitr::knit nicht empfohlen) - können Sie den Anfang Ihres *.R-Skripts oder den Codeabschnitt Ihrer *.Rmd-Datei (wo Sie lesen einige Daten)
setwd(gsub(pattern = '/scripts', replacement = '', x = getwd()))

Wenn Sie das *.R-Skript ausführen oder ausführen, ohne zu kompilieren (beispielsweise beim Testen des Skripts), wird der übliche getwd()-Pfad nicht geändert, da das /scripts-Muster nicht gefunden wird. Beim Kompilieren in HTML wird der Pfad des Arbeitsverzeichnisses bearbeitet, indem der /scripts-Teil aus path/to/my_project/scripts gelöscht wird.

Mit diesen beiden Optionen können Sie relative Pfade wie folgt verwenden:

read.csv('data/my_data.csv')

etwas vermeiden wie:

read.csv('../data/my_data.csv')

dies kann schwierig sein, wenn Sie Ihre Scritps testen möchten, bevor Sie sie zu HTML-Berichten zusammenstellen.

1
Valentin

Sie müssen absolute Pfade oder relativ zu Ihrem Projektordner festlegen, wie von anderen Autoren erwähnt. Sie können auch Setwd (Pfad).

Aber das reicht mir nicht. Aus irgendeinem Grund finde ich, dass ich alle meine Daten in den allerersten Block von R-Befehlen in der .Rmd-Datei laden muss, andernfalls erhalte ich dieselbe Fehlermeldung wie Sie.

Mit anderen Worten:

```{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

Für mich war es einfach ein Fall, in dem ich meine .Rmd-Datei noch nicht gespeichert habe ... Wie bereits erwähnt, versucht der Code, die Datei in demselben Verzeichnis zu finden, in dem sich .Rmd befindet, und die .Rmd ist nicht vorhanden Sie könnten diese Fehlermeldung erhalten.

0
dmt