という名前のプロジェクト ディレクトリがあり(MRE についてはgithubtestknit
を参照してください)、この中にいくつかのサブディレクトリがあり、保持する場所やファイルを含むとします。scripts
.R
.rmd
RStudio でプロジェクトを作成し、このtestknit
ディレクトリを選択して、プロジェクトを開いたときに作業ディレクトリがmypath/testknit
.
中testknit/scripts
にはmaster.R
ファイルがあります。testsource1.R
にもあるというファイルをソースにしたい場合は、 内からtestknit/scripts
実行できます。source("scripts/testsource1.R")
master.R
library(knitr)
getwd()
# [1] "mypath/testknit"
source("scripts/testsource1.R")
ここまでは順調ですね。
しかし、にあるという.rmd
ファイルも編みたいとしましょう。から走れます。test.rmd
testknit/scripts
knit("scripts/test.rmd")
master.R
私のtest.rmd
ファイルは次のことを行います:
```{r setup}
library(knitr)
opts_knit$set(root.dir='../')
```
```{r option1}
source("scripts/testsource2.R")
```
```{r option2}
source("testsource2.R")
```
test.rmd
内に存在するので、最初のチャンクでtestknit/scripts
指定するopts_knit$set(root.dir='../')
ので、knitr は私のルート ディレクトリが実際には 1 レベル上にあることを認識します。
test.rmd
RStudio で開いて をクリックknit HTML
すると、予想どおり、チャンクはoption1
機能しますが、option2
チャンクは機能しません。
しかし、ファイル内から編むのではなく、test.rmd
実行knit("scripts/test.rmd")
して編もうとすると、どちらのチャンク オプションも機能しません。どちらも、その名前のファイルがないというエラーを返します。master.R
.rmd
私は何を間違っていますか?マスターからファイルをtestsource2.R
編成するときにR が見つからないのはなぜですか?.rmd
.R
再現可能な例については、上記の github リンクを参照してください。
アップデート:
以下のコメントで指摘したように、wd <- getwd()
直前に追加してみて、 にopts_knit$set
変更(root.dir='../')
しました(root.dir=wd)
。したがって、 から実行knit("scripts/test.rmd")
すると、追加した が に設定されるmaster.R
ため、option2 チャンクが実行されます。しかし、ファイルを開いてすべてのチャンクを実行すると、 がルート ディレクトリに設定され、option1 チャンクが実行されます。wd
mypath/testknit/scripts
.rmd
wd
mypath/testknit
プロジェクトのルートを維持するには、作業ディレクトリが必要です。これは私にはエレガントな解決策のようには思えませんが、次のように変更します。
```{r setup}
library(knitr)
opts_knit$set(root.dir='../')
```
に
```{r setup}
library(knitr)
wd <- ifelse(basename(getwd())=="scripts",
gsub("/scripts", "", getwd()),
getwd())
opts_knit$set(root.dir=wd)
```
.rmd
ファイル内またはknit("scripts/test.rmd")
からのすべてのチャンクを実行できますmaster.R
。それは機能しますが、間違ったアプローチを取っているように感じます。