## Don,

## This is how I would approach the task of a set of coordinated plots.

## I would place individual plots inside a table. The rows would index the

## datasets and there would be one or more data or description columns

## in addition to the column containing the graphs.

## I use the microplot package that I placed on CRAN about two years ago.

## install.packages("microplot") ## if necessary

library(microplot)

latexSetOptions()

## I normally use lattice. microplot also works with ggplot or base graphics

library(lattice)

## I placed your data into a single data.frame

myd <- lapply( 1:3,

function(i) list(df=data.frame(x=1:5, y=rnorm(5)),

comment=paste('Data', LETTERS[i]))

)

mydf <- cbind(group=rep(c("A", "B", "C"), each=5),

rbind(myd[[1]]$df, myd[[2]]$df, myd[[3]]$df))

mydf

## construct a lattice with multiple panels

my.lattice <-

xyplot(y ~ x | group, data=mydf,

layout=c(1,3), as.table=TRUE, col="black",

scales=list(alternating=FALSE),

ylab=list(rot=1))

my.lattice

## microplot provides latex.trellis, which is a method for Hmisc::latex

## simplest display

latex(my.lattice)

## now with comments and optional additional arguments

mycomments <-

c("Interesting Comment",

"Full \\LaTeX\\ with an equation $e^{-x^2}$",

"\\begin{tabular}{l}$\\frac{dy}{dx}$ \\\\is interesting \\\\and

has multiple lines\\end{tabular}")

latex(my.lattice,

title="Dataset",

height.panel=1, width.panel=1.5, ## inches

height.x.axis=.38, width.y.axis=.45,

graph.header="xyplot(y ~ x | group)",

dataobject=mycomments,

colheads=c("Comments", "", "", "xyplot( y \\~{} x )"),

caption="Very Interesting Caption",

caption.loc="bottom",

arraystretch=1.5)

## microplot produces MS Word tables as well as LaTeX tables.

## microplot works with ‘Sweave’, ‘knitr’, ‘emacs’ ‘orgmode’, and ‘rmarkdown’

## Start with ?microplot-package

## and look at the demos and examples and vignette.

## Rich

On Thu, Aug 16, 2018 at 7:44 PM, MacQueen, Don via R-help

<

[hidden email]> wrote:

> I would appreciate some suggestions of a good way to prepare a report using rmarkdown,

> in which I loop through subsets of a data set, creating a plot of each subset, and interspersing

> among the figures some text relevant to each figure.

>

> One way is to have an R script write the rmd file, then render it.

> It works, but it's cumbersome and difficult to get the rmd syntax correct.

> I would very much appreciate suggestions for a better way.

>

> Reproducible example below.

>

> Thanks

> -Don

>

>

> Example data (other data structures could be used), and an example using this approach.

>

> myd <- lapply( 1:3,

> function(i) list(df=data.frame(x=1:5, y=rnorm(5)),

> comment=paste('Data', LETTERS[i]))

> )

>

> Example interactive review (details would change depending on data structure)

> (I would typically insert pauses when working interactively)

>

> for (i in 1:3) {

> cat(paste('Figure',i,'shows',myd[[i]]$comment),'\n')

> with(myd[[i]]$df , plot(x,y))

> mtext(myd[[i]]$comment)

> mtext( paste(nrow(myd[[i]]$df),'points'), adj=1)

> }

>

> Note that along with the data I've saved some comments relevant to each subset.

> I've calculated them in the example data, but in general they could be completely

> arbitrary and come from anywhere.

>

> Now I'd like to get the same plots and comments into a report prepared using rmarkdown.

> Here's one way, having the loop create an rmd file, then rendering it.

>

> ### example script begins

> library(rmarkdown)

>

> myf <- 'myd.rmd'

> sink(myf)

> cat('---

> title: Example

> ---

>

> Here are some figures with a comment appearing before each.\n\n'

> )

> sink()

>

> for (i in 1:3) {

> cat(paste('Figure',i,'comment:',myd[[i]]$comment),'\n', file=myf, append=TRUE)

>

> cat("

> ```{r echo=FALSE, fig.cap='",paste('fig',i),"caption.'}

> with(myd[[",i,"]]$df , plot(x,y))

> mtext(myd[[",i,"]]$comment)

> mtext( paste(nrow(myd[[",i,"]]$df),'points'), adj=1)

> ```

> ", file=myf, append=TRUE)

>

> }

>

> cat('Done with report\n', file=myf, append=TRUE)

>

> render(myf)

>

> --

> Don MacQueen

> Lawrence Livermore National Laboratory

> 7000 East Ave., L-627

> Livermore, CA 94550

> 925-423-1062

> Lab cell 925-724-7509

>

>

>

> ______________________________________________

>

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

>

https://stat.ethz.ch/mailman/listinfo/r-help> PLEASE do read the posting guide

http://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.

______________________________________________

[hidden email] mailing list -- To UNSUBSCRIBE and more, see

https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide

http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.