[Rd] RMarkdown Vignettest in R packages with child is failing in package build

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Tue Jul 10 19:52:38 CEST 2018


On 10/07/2018 11:44 AM, Witold E Wolski wrote:
> Dear List,
> 
> I am working on moving some Rmarkdown reports into the vignettes
> folder of a package. While I was able to solve to problem of
> parametrized reports in vignettes folder thanks to your invaluable
> help (Thank you), I am now struggling with the following problem.
> 
> 
> One of the reports which I am moving to vignettes includes the following code :
> 
> 
> ```{r}
> child_docs <- "Grp2Analysis_MissingInOneCondtion.Rmd_t"
> if(TRUE){
>    child_docs <- "Grp2Analysis_Empty.Rmd_t"
> }
> 
> ```
> 
> ```{r includeMissingInOne, child = child_docs}
> ```
>     # this is line 351 from the error message
> 
> which depending on a test outcome includes one or the other Rmarkdown
> document into the main document.
> 
> 
> While this report renders executing rmarkdown::render or
> devtools::build_vignettes, it fails when building the package with
> devtools::build or R CMD build
> given the following error:
> 
> 
> Error in eval(x, envir = envir) : object 'child_docs' not found
> Warning in readLines(if (is.character(input2)) { :
>    cannot open file './child_docs': No such file or directory
> Quitting from lines 351-351 (./child_docs)
> Error in readLines(if (is.character(input2)) { :
>    cannot open the connection
> ERROR: installing vignettes failed
> * removing 'C:/Users/wolski/AppData/Local/Temp/RtmpIti891/Rinst2cec49ca2170/SRMService'
> In R CMD INSTALL
> 


Since you didn't give a path to that file, it will use the current 
working directory, which might be a temporary directory used during the 
package installation.  Since you want this to work as a vignette, you 
need to include the child docs in your package.  One way to do that is 
to put them in a new directory called "inst/children", which will be 
installed to "children" when your package is installed.  Then the 
vignette can find the file as

     system.file(file.path("children", child_docs), package = "yourpackage")

You could also put them in the "vignettes" directory, but there are 
special rules for how files there are installed or not, so I'd recommend 
against it.

Duncan Murdoch



More information about the R-devel mailing list