knitr:如何在不使用setwd()的情况下在knit2html中设置数字路径?

Pau*_*eux 6 r knitr r-markdown

我在项目文件夹中工作,让我们说它的绝对路径是:/project.getwd()告诉我,我在这个项目文件夹中.我的所有文件读取和写入都与此项目根相关./project有一个子文件夹/project/docs/其中有一个R Mardown文件和一个R脚本:

report.Rmd 包含:

```{r }
plot(cars)
```
Run Code Online (Sandbox Code Playgroud)

knit_reports.R包含:

library(knitr)
knit2html("./docs/report.Rmd", "./docs/report.html")
Run Code Online (Sandbox Code Playgroud)

如果我运行knit_reports.R,会生成一个html页面,但页面上不会显示数字.

问题是数字存储在/project/figures.对于html文档生成,它们不可见.我正在寻找一种方法告诉knitr存储图片/project/docs/figures.

设置knitr选项root.dir或base.dir in report.Rmd不能解决问题,我试过opts_knit$set(root.dir = "./docs")opts_knit$set(base.dir = "/project/docs").

但是,如果我将工作目录更改为/project/docs:

setwd("./docs/")
knit2html("report.Rmd", "report.html")
Run Code Online (Sandbox Code Playgroud)

/project/docs/figure创建一个文件夹,并在html页面上显示图形.

许多人说在脚本中使用setwd()是不好的,因为它会弄乱可重复性.如何在不使用setwd()的情况下告诉knitr将数字放在我的项目子文件夹中?

Ram*_*ath 7

在chunk选项上查看此页面.特别是,您有两种选择

  1. 使用fig.path到相对于你的工作目录情节目录设置(OR)
  2. 利用base.dir设置在其中保存地块绝对目录.

我认为(2)可能是您的上下文中更好的解决方案.不要setwd()knitr文档中使用,因为保持文档可重现性不是好的做法.


Pau*_*eux 5

Ramnath对设置base.dir的回答是个好答案.但起初我认为该选项应该在Rmd块中设置,这不起作用.该选项应在R脚本中设置.这是我猜的范围问题.

所以在我上面的例子中,knit_reports.R应该包含:

library(knitr)
opts_knit$set(base.dir = 'docs') # Change the base dir where to save figures
knit2html("./docs/report.Rmd", "./docs/report.html")
Run Code Online (Sandbox Code Playgroud)