web-dev-qa-db-ja.com

RStudioで「ニットHTML」を実行する際のエラー「接続を開けません」

RStudioで「HTMLをニット」しようとすると、次のエラーが表示されます。

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

64ビットのwin8マシンでRStudioを使用しています。

17
Praveen Kishor

「Knit HTML」を実行すると、knitrが作業ディレクトリをそのパスに設定するため、コードは_.Rmd_が置かれているのと同じディレクトリで読み取り中のファイルを見つけようとします。私の知る限り、2つの選択肢があります。

  • ファイルへの絶対パスを指定してみてください(非常に堅牢ではありませんが、場合によっては便利です)。
  • ファイルへの相対パスを見つけます。 _.Rmd_に_/_ファイルがあり、_/data_にデータがある場合、相対パスはread.table("./data/myfile.csv"...)である必要があります。 _._は「ここ」(getwd()が存在する場所)を意味し、2つのドットはディレクトリ構造を上に登り、ディレクトリを指定すると構造を下っていきます。
19
Roman Luštrik

特にrmdファイルがプロジェクトのルートフォルダーに保存されていない場合、Rmdファイルの実行パスがわずらわしい場合があります。通常、プロジェクトルートのすべての一時ファイル(例:Report/myreport.Rmd)を避けるために、rmdをReportフォルダーに保存します。

たとえば、Resourcesフォルダーにファイルmyfile.csvがあります。 rmdファイルでは、2つのドットを使用してファイルパスを指定する必要があります。

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

しかし、通常の作業ディレクトリはプロジェクトのルートフォルダであるため、Rstudioプロジェクトのコンソールでコードをテストする場合、ファイルパスは正しくありません。したがって、ファイルパスから2つのドットを削除する必要があります。

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

この問題を自分で解決するための簡単な関数を作成しました( https://github.com/byzheng/rproject )。関数project_filepathは、プロジェクトのルートフォルダーに相対的な新しいパスを生成します。したがって、作業ディレクトリはプロジェクト内の任意のサブフォルダーになります。以下のコードは、Rmdファイルとコンソールで機能します。

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

これがグローバルオプションの一部であるのでわかりませんが、つまずいたのでここに書かれていません:グローバルオプション-> Markdownの下に、「ディレクトリ内のチャンクを評価する」設定と使用するときがあります「現在」または「プロジェクト」これは少なくとも私にとっては機能しました(明らかに、デフォルトでは「ドキュメント」に設定されています)

2
Julius Diel

次は私のために働いた-あなたのプロジェクト(たとえば、my_projectという名前のディレクトリ)が次のように整理されている場合:

enter image description here

フォルダーscriptsには、HTMLレポート(R_Studioからの*.Rmd)として編成/コンパイルしたい*.rmd*.R)ファイルまたは*.rCTRL + SHIFT + K)スクリプトがあります。

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

または絶対パスを使用します。ただし、ディレクトリ/リポジトリを同僚と共有する場合はお勧めしません(Windowsでは、C:/my/absolute/path/to/my_projectのようなものは他のコンピューターでは機能せず、my_projectを移動すると失敗します)

```{r setup, include=FALSE}
knitr::opts_knit$set(root.dir = 'absolute/path/to/my_project/')
```
  • 2)*.Rスクリプトと*.Rmdファイルの両方について( knitr::knit のヘルプに注意しないでください)-*.Rスクリプトの先頭または*.Rmdファイルのコードチャンク(あなたはいくつかのデータを読む)
setwd(gsub(pattern = '/scripts', replacement = '', x = getwd()))

コンパイルせずに*.Rスクリプトを実行/実行した場合(スクリプトのテスト時など)、/scriptsパターンが見つからないため、通常のgetwd()パスは変更されません。 HTMLにコンパイルするとき、/scriptsからpath/to/my_project/scripts部分を削除することにより、作業ディレクトリパスを編集します。

これらの両方のオプションにより、次のような相対パスを使用し続けることができます。

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

次のようなものを避けます:

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

スクリプトをHTMLレポートにコンパイルする前にスクリプトをテストする場合は、注意が必要です。

1
Valentin

他の作成者が言及しているように、絶対パスまたはプロジェクトフォルダーに対する相対パスを設定する必要があります。 setwd(path)もできます。

ただし、これでは十分ではありません。何らかの理由で、.RmdファイルのRコマンドの最初のブロックにすべてのデータをロードする必要があることがわかります。そうしないと、同じエラーが表示されます。

言い換えると:

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

私にとって、それは単に.Rmdファイルをまだ保存していない場合です...上記で指摘したように、コードは.Rmdが配置されているのと同じディレクトリ内でファイルを見つけようとしていますが、.Rmdは存在しません、このエラーが発生する可能性があります。

0
dmt