如何在 R Markdown 中创建一个子段落。

12

我正在尝试创建一个类似于R Markdown的文档。在一个名为 app 的向量中,我将有几个应用程序,将对其进行遍历,并创建一个 PDF 文件。

---
title: "Java Based Apps"
date: "January 13, 2017"
output: 
  pdf_document: 
    number_sections: yes
    toc: true
    highlight: zenburn
    fig_width: 7
    fig_height: 6
    fig_caption: true

tables: yes
keep_tex: true
fontsize: 12
---



```{r message=FALSE, results = 'asis', echo=FALSE, warning=FALSE}

app<-c("Sample APP")

for (i in app){

    cat(paste("## ", "- Correlation Analysis between performance KPI's"))
    cat("\n")
    m<-corrplot(M, method="number")

    cat(paste("## ", "- JVM %CPU Usage"))
    cat("\n")

    print(ggplot(data, aes(Date, JVM_CPU, group=JVM))+geom_point()+geom_smooth(method="lm",se=F)+theme_bw()+
    ggtitle(paste(i, " - JVM %CPU Usage/15 Minute Interval"))+facet_wrap(~JVM, scale="free"))

    cat(paste("## ", "- JVM Heap Usage"))
    cat("\n")

    print(ggplot(data, aes(Date, JVM_Mem, group=JVM))+geom_point()+geom_smooth(method="lm",se=F)+theme_bw()+
    ggtitle(paste(i, " - JVM Memory Usage/15 Minute Interval"))+facet_wrap(~JVM, scale="free")+ylab("Memory Usage/MG"))

 }
```

输出需要像这样:

Sample App
   - Correlation Analysis between performance KPI's
   - JVM %CPU Usage
   - JVM Heap Usage

等等

我看到这个:

Sample App
   - Correlation Analysis between performance KPI's

但其他的并没有被创建为子部分。你有什么想法我在这里做错了吗?


1
这很奇怪。如果你删除图表,三个部分就能正常工作,但一旦你在它们之间添加了什么东西,这些部分就停止工作了。 - Lloyd Christmas
2个回答

9
在每个绘图后添加cat("\n\n")以添加空格。这有助于确保##正确地将子节分隔开。

1
图表显示出来了,但它们一个接一个地显示。这可能是由于LaTeX渲染浮动图形的原因,尝试减小图形大小并在每个绘图后放置\pagebreak以查看是否有所帮助。 - Paul Rougieux
对我来说,所有的图表都出现在它们应该出现的部分。如果你真的想强制让浮动体出现在各自的章节中,你可以在每个章节后包含一个\clearpage命令,这将强制latex将图表放置在这些章节中。 - Lloyd Christmas
@LloydChristmas,比如说,我有这段代码m<-corrplot(M, method="number"),\clearpage,看起来它不喜欢反斜杠。 - user1471980
由于您在 R 代码块中,因此需要使用双反斜杠 \\,或者使用 cat("\\clearpage")cat("\\newpage") - Lloyd Christmas
你只需要在每个章节的末尾放置“清除页面”(而不是每个图之后)。如果章节标题和第一个图不在同一页上,那可能仅仅是因为图像大小相对于页面太大。此外@PaulRougieux有关LaTeX渲染浮动图的评论也是正确的。当您强制它做一些事情时,问题就开始出现了。 - Lloyd Christmas
显示剩余3条评论

5
如果将问题分解,它会变得更容易。我创建了一些虚假数据。
您可以拥有一个名为main.Rmd的文件,在其中运行for循环,例如:
title: "Java Based Apps"
date: "January 13, 2017"
output: 
  pdf_document: 
    number_sections: yes
    toc: true
    highlight: zenburn
    fig_width: 7
    fig_height: 6
    fig_caption: true
tables: yes
keep_tex: true
fontsize: 12
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = F, message = F, warning = F)
library(tibble)
library(lubridate)
library(dplyr)
library(corrplot)
library(ggplot2)
library(knitr)
# Create some sample data
set.seed(2887)
data <- tibble(
  app = sort(rep(c("sample app", "sample app 2"), 500))
  , Date = rep(seq(now() - as.difftime(7, unit="days"), now(), length.out = 500), 2)
  , JVM = sample(c("a", "b", "c"), size = 1000, replace = T)
  , JVM_CPU = runif(1000, 0, 100)
  , JVM_Mem = runif(1000, 0, 100)
)
```

```{r}
app <- sort(unique(data$app))

out <- NULL
for (i in app){
  data.filtered <- dplyr::filter(data, app == i)
  out <- c(out, knit_child('app_template.Rmd', quiet = TRUE))
}
```

`r paste(out, collapse='\n')`

你将迭代一个模板,这里我称其为app_template.Rmd,它看起来像这样(请注意它没有yaml):
\pagebreak

# `r i`

## Correlation Analysis between performance KPI's

```{r, fig.width=5, fig.height=5}
m <- matrix(rnorm(1000), ncol = 10)
M <- cor(m)
corrplot(M, method="number")
```

## JVM %CPU Usage

```{r, fig.width=10, fig.height=5}
ggplot(data.filtered, aes(Date, JVM_CPU, group=JVM)) +
  geom_point() +
  geom_smooth(method = "lm", se = F) + 
  theme_bw() +
  ggtitle(paste(i, " - JVM %CPU Usage/15 Minute Interval")) + 
  facet_wrap(~ JVM, scale = "free")
```

## JVM Heap Usage

```{r, fig.width=10, fig.height=5}
ggplot(data.filtered, aes(Date, JVM_Mem, group = JVM)) + 
  geom_point() + 
  geom_smooth(method = "lm", se = F) + 
  theme_bw() +
  ggtitle(paste(i, " - JVM Memory Usage/15 Minute Interval")) + 
  facet_wrap(~ JVM, scale = "free") + 
  ylab("Memory Usage/MG")
```

如果你编织main.Rmd,你应该得到一个符合你要求的.pdf

如何通过命令行将.Rmd文件编织成.pdf文件? - user1471980

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接