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を使用しています。
「Knit HTML」を実行すると、knitr
が作業ディレクトリをそのパスに設定するため、コードは_.Rmd
_が置かれているのと同じディレクトリで読み取り中のファイルを見つけようとします。私の知る限り、2つの選択肢があります。
.Rmd
_に_/
_ファイルがあり、_/data
_にデータがある場合、相対パスはread.table("./data/myfile.csv"...)
である必要があります。 _.
_は「ここ」(getwd()
が存在する場所)を意味し、2つのドットはディレクトリ構造を上に登り、ディレクトリを指定すると構造を下っていきます。特に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'))
これがグローバルオプションの一部であるのでわかりませんが、つまずいたのでここに書かれていません:グローバルオプション-> Markdownの下に、「ディレクトリ内のチャンクを評価する」設定と使用するときがあります「現在」または「プロジェクト」これは少なくとも私にとっては機能しました(明らかに、デフォルトでは「ドキュメント」に設定されています)
次は私のために働いた-あなたのプロジェクト(たとえば、my_project
という名前のディレクトリ)が次のように整理されている場合:
フォルダーscripts
には、HTMLレポート(R_Studioからの*.Rmd
)として編成/コンパイルしたい*.rmd
*.R
)ファイルまたは*.r
(CTRL + SHIFT + K
)スクリプトがあります。
*.Rmd
ファイルの場合のみ、ファイルの先頭に作業ディレクトリへのパスを定義するオプションがあります(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`
```
または絶対パスを使用します。ただし、ディレクトリ/リポジトリを同僚と共有する場合はお勧めしません(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/')
```
*.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レポートにコンパイルする前にスクリプトをテストする場合は、注意が必要です。
他の作成者が言及しているように、絶対パスまたはプロジェクトフォルダーに対する相対パスを設定する必要があります。 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")
````
私にとって、それは単に.Rmdファイルをまだ保存していない場合です...上記で指摘したように、コードは.Rmdが配置されているのと同じディレクトリ内でファイルを見つけようとしていますが、.Rmdは存在しません、このエラーが発生する可能性があります。