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

时间:2014-02-05 16:12:37

标签: r knitr r-markdown

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

report.Rmd包含:

```{r }
plot(cars)
```

knit_reports.R包含:

library(knitr)
knit2html("./docs/report.Rmd", "./docs/report.html")

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

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

report.Rmd中设置knitr选项root.dir或base.dir无法解决问题,我尝试了opts_knit$set(root.dir = "./docs")opts_knit$set(base.dir = "/project/docs")

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

setwd("./docs/")
knit2html("report.Rmd", "report.html")

创建/project/docs/figure文件夹,并在html页面上显示数字。

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

3 个答案:

答案 0 :(得分:6)

看看这个page on chunk options。特别是,您有两个选择

  1. 使用fig.path设置相对于工作目录的绘图目录(OR)
  2. 使用base.dir设置保存图表的绝对目录。
  3. 我认为(2)在您的上下文中可能是更好的解决方案。不要在setwd()文档中使用knitr,因为保持文档可重现性不是一种好的做法。

答案 1 :(得分: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")

答案 2 :(得分:0)

我想补充一点,如果你在knit2html中指定一个不同的输出目录,你可能会遇到问题,因为图形文件夹被保存到原始目录中。然后,至少根据我的经验,html文件将不包含你的情节。所以:如其他地方所述。尽量不要更改输出目录