2
votes

I have an rmarkdownfile with a chunck that has a loop that creates many pages. Below is a toy example. See the "loop_chunk" code chunk. The "loop_chunk" has fig.width=9, fig.height=6, results="asis" and I am running into a problem where i need to reduce the size of a plot inside loop_chunk. All plots are 9x6 but I need to adjust one plot. I found the codee below: http://michaeljw.com/blog/post/subchunkify/

and I tried using it below but when you run the code you can see that there are 2 plots on pages 3 and 5 and there should not be. it is somehow not keeping the \newpages. There should be 1 plot on pages 2,3,4 and 5. There should only be 5 pages.

Any idea how to fix this?

---
title: "Untitled"
output: pdf_document
toc: yes
---

```{r setup, include=FALSE}

knitr::opts_chunk$set(echo = FALSE  , comment = NA, message= FALSE, warning = TRUE)


subchunkify <- function(g, fig_height=7, fig_width=5) {
  g_deparsed <- paste0(deparse(
    function() {g}
  ), collapse = '')

  sub_chunk <- paste0("
  `","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=", fig_height, ", fig.width=", fig_width, ", echo=FALSE}",
  "\n(", 
    g_deparsed
    , ")()",
  "\n`","``
  ")


  cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE))
}

data = data.frame(group= c("A","A"), value = c(1,3))

```



```{r loop_chunk, fig.width=9, fig.height=6, results="asis", message= FALSE, warning = FALSE}

for(i in 1:nrow(data)){

  cat(paste0("\\newpage\n # Page ", i  ," \n"))

  plot(data$value[i])

  cat("\n\n")

    cat(paste0("\\newpage\n ## page with smaller plot \n\n"))

    cat("Here is some text on this page for the smaller plot.")

     cat("\n\n")

    data2 =  data.frame(x = 7, y = 900)         
    library(ggplot2)
    myplot  = ggplot(data2, aes(x = x, y = y    ))+geom_point()
    subchunkify(myplot , 4,4 )
    # print(myplot) -> IS there a way to just reduce the height and width with print()?

  cat("\n\n")


}


```
1

1 Answers

2
votes

Using your subchunkify() function for the graphics::plot call outputs those plots to the intended pages. Replacing plot(data$value[i]) in your second chunk with

subchunkify(plot(data$value[i]), 5, 5)

outputs the 5 pages with plots as intended (where height & width are set to 5/can be edited to conditionally set dimensions for a specific plot).