[R] Paths in knitr
Duncan Murdoch
murdoch.duncan at gmail.com
Thu Jun 8 17:03:39 CEST 2017
On 08/06/2017 7:15 AM, G.Maubach at weinwolf.de wrote:
> Hi All,
>
> I have to compile a report for the management and decided to use RMarkdown
> and knitr. I compiled all needed plots (using separate R scripts) before
> compiling the report, thus all plots reside in my graphics directory. The
> RMarkdown report needs to access these files. I have defined
>
> ```{r setup, include = FALSE}
> knitr::opts_knit$set(
> echo = FALSE,
> xtable.type = "html",
> base.dir = "H:/2017/Analysen/Kundenzufriedenheit/Auswertung",
> root_dir = "H:/2017/Analysen/Kundenzufriedenheit/Auswertung",
> fig.path = "results/graphics") # relative path required, see
> http://yihui.name/knitr/options
> ```
>
> and then referenced my plot using
>
> <img src = "email_distribution_pie.png"></img>
>
> because I want to be able to customize the plotting attributes.
>
> But that fails with the message "pandoc.exe: Could not fetch
> email_distribution_pie.png".
>
> If I give it the absolute path
> "H:/2017/Analysen/Kundenzufriedenheit/Auswertung/results/graphics/email_distribution_pie.png"
> it works fine as well if I copy the plot into the directory where the
> report.RMD file resides.
>
> How can I tell knitr to fetch the ready-made plots from the graphics
> directory?
Put the path in a variable, and use that in the img tag, e.g.
```{r}
gdir <- file.path(knitr::opts_knit$get("base.dir"), "graphics")
```
<img src = `r file.path(gdir, "email_distribution_pie.png")`></img>
If you think that is still too much typing, you could make a little
function to turn a string like "email_distribution_pie" into the fully
specified path.
HOWEVER: Your workflow may not be ideal. It is almost always better to
produce the graphs in code that's in the document, rather than in
separate R scripts. This makes it *much* easier to modify the plots
and be sure that the latest version makes it into the report.
If the plots require lots of code and you think it would be distracting
in the source of your document, then it's time to make a private
package, and put the code in there. In the document, just include calls
to functions from that package.
Duncan Murdoch
More information about the R-help
mailing list