问题 你如何在R markdown中创建一个子节


我正在尝试创建一个如下所示的R降价。在一个名为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

但其他人不是作为小节创建的。知道我在这里做错了吗?


12573
2018-01-23 20:48


起源

那很奇怪。如果删除这些图,则3个部分按预期工作,只要在其间添加内容,这些部分就会停止工作。 - Lloyd Christmas


答案:


如果你将问题分开则更容易。我创建了一些虚假数据。

你可以有一个 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")
```

如果你 knit 该 main.Rmd 你应该得到一个 .pdf 符合您的要求。


5
2018-02-09 20:39



你如何执行编织.Rmd文件从命令行生成.pdf文件? - user1471980
跑 R -e "rmarkdown::render('main.Rmd')" - animalito


cat("\n\n") 每个情节后添加空间。这应该有助于使##工作正确地分离子部分。


8
2018-01-23 22:43



好吧,图表显示但他们一个接一个地显示。我希望他们分段展示。例如,在标题JVM Cpu标题之后,应该有jvm cpu图表,在JVM Heap Usage标题之后,JVM Heap使用情况图表等。任何想法在这里发生了什么? - user1471980
你会发布修改后的代码吗?当我使用虹膜数据在我自己的三个图表上进行测试时(您没有提供可重现的示例),我每个子部分获得一个图表没有问题。 - Ryan Morton
“图表显示但是它们一个接一个显示。”这可能是由于乳胶渲染浮动数字,尝试减少数字大小和放置一个 \pagebreak 在每个情节之后看看是否有帮助。 - Paul Rougieux
对我来说,所有数字都出现在适当的部分。如果你真的想强制用浮动填充部分,你可以包括一个 \clearpage 在每个部分之后命令强制乳胶将数字放在这些部分中。 - Lloyd Christmas
以@LloydChristmas为例,我有这段代码m <-corrplot(M,method =“number”)\ clearpage,看起来它不喜欢反斜杠。 - user1471980