I have an .Rmd file which contains commands to build a plot. buildConstellation.Rmd (see here).
I typically refer to this file from another .Rmd file, which acts as a notebook for a specific dataset or analysis I may be doing at a given time, i.e., 20210305_neocortex_Constellation.Rmd
Usually, I just call rmarkdown::render and specify the objects that buildConstellation.Rmd takes as params.
rmarkdown::render(input = './buildConstellation.Rmd',
params = list(my_object = neocortex,
out.dir = '../out'))
This works fine because the script buildConstellation.Rmd writes a PDF with the final plot, and all the intermediate tables that it creates are saved to my global environment.
However, I recently had to do a variation of this, where I need to split the object I pass as argument to buildConstellation.Rmd (neocortex) into three parts, based on a variable stage.
neocortex_split_stages <- neocortex %>% split(.$stage)
Once it is split, I can run buildConstellation.Rmd on each of the three subsets of the original object.
neocortex_split_stages$early
neocortex_split_stages$mid
neocortex_split_stages$late
Now, when I pass the newly created list to rmarkdown::render using map, the intermediate tables don't make it to the .GlobalEnv.
split_stages %>%
map(~ rmarkdown::render(input = './buildConstellation.Rmd',
params = list(my_object = . ,
out.dir = '../out'))
The final plots get created, but the only way I can recover the intermediate objects is to write them to a file in buildConstellation.Rmd, and then import them back in my .GlobalEnv.
I turned the entirety of buildConstellation.Rmd into a function and saved in a file called buildConstellation.R, which I can source and call, and which returns those intermediate objects.
source("../R/buildConstellation.R")
constellation_result <- split_stages %>%
map(~ buildConstellation(my_object = . ,
out.dir = '../out' ))
This works, but is ugly. I really would like to know how I can do this using the R markdown file, without having to glob all those pretty chunks and readable text in between into a gross function filled with comments and no chunks.
Your help is greatly appreciated! 