我在项目文件夹中工作,让我们说它的绝对路径是:/project
。 getwd()
告诉我,我在这个项目文件夹中。我的所有文件读取和写入都与此项目根相关。 /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将数字放在我的项目子文件夹中?
答案 0 :(得分:6)
看看这个page on chunk options。特别是,您有两个选择
fig.path
设置相对于工作目录的绘图目录(OR)base.dir
设置保存图表的绝对目录。我认为(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文件将不包含你的情节。所以:如其他地方所述。尽量不要更改输出目录