我在一个项目文件夹中工作,假设它的绝对路径为:
"而且,knit_reports.R 包含以下内容:"
如果我运行
问题在于图像存储在
在
然而,如果我将工作目录更改为
创建一个
许多人说在脚本中使用setwd()是不好的,因为它会破坏可重复性。我该如何告诉knitr将图像放置在我的项目子文件夹中,而不使用setwd()呢?
/project
。 getwd()
告诉我我当前在这个项目文件夹中。我的所有文件读取和写入都是相对于这个项目根目录的。 /project
有一个子文件夹 /project/docs/
,其中包含一个 R Markdown 文件和一个 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()是不好的,因为它会破坏可重复性。我该如何告诉knitr将图像放置在我的项目子文件夹中,而不使用setwd()呢?
setwd()
仅在计算开始后才会变得糟糕。它本质上并不邪恶。相反,最好在其他所有操作之前先使用setwd()
。之后,您可以假设一切都是相对于当前工作目录的,这将使您的生活更加轻松。几乎总是不明智的设置knit()
或knit2html()
的output
参数。嗯,我承认这是我作为软件包作者的头疼问题。我鼓励您只需setwd("./docs/"); knit2html("report.Rmd")
,然后您就可以获得report.html
。 - Yihui Xieopts_knit $ set(base.dir ='docs')
可以解决我的问题。起初,我尝试在Rmd文档的块选项中设置“base.dir”。但是,在R脚本“knit_reports.R”中设置“base.dir”选项确实有效,并解决了我的问题:-) - Paul Rougieux