2017-01-23 16 views
11

Próbuję utworzyć R Markdown jak poniżej. W wektorze nazywa aplikacji, będę mieć kilka aplikacji, pójdzie choć i utworzyć plik pdfJak utworzyć podsekcję w R markdown

--- 
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")) 

} 
``` 

wyjście musi być tak:

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

itp

widzę to:

, ale inne nie są tworzone jako podsekcje. Masz pojęcie, co tu robię źle?

+1

To dziwne. Jeśli usuniesz wykresy, trzy sekcje działają zgodnie z przeznaczeniem, gdy tylko dodasz coś pomiędzy, sekcje przestają działać. –

Odpowiedz

5

Jeśli dzielisz problem, łatwiej. Stworzyłem fałszywe dane.

Można mieć main.Rmd gdzie uruchomieniu for pętli takich jak:


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')` 

Będziesz iteracyjnego szablon które tutaj mam nazwie app_template.Rmd i wygląda następująco (Zauważ, że nie ma 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") 
``` 

Jeśli knitmain.Rmd zalecana uzyskać .pdf według specyfikacji.

+0

jak wykonać plik .Rmd w celu utworzenia pliku .pdf z wiersza poleceń? – user1471980

+0

Uruchom 'R -e" rmarkdown :: render ('main.Rmd') "' – animalito

8

Dodaj po każdym wykresie cat("\n\n"), aby dodać spację. To powinno pomóC## działać poprawnie, aby oddzielić podsekcje.

+0

OK, wykresy pokazują się, ale pokazują po kolei. Chcę je pokazać w sekcjach. Na przykład po nagłówku JVM Cpu powinien znajdować się wykres procesora jvm, po nagłówku JVM Heap Usage, wykresie użycia sterty JVM itd. Jakieś pomysły, co tu się dzieje? – user1471980

+0

Czy zamieściłbyś swój zmieniony kod? Kiedy testowałem na własnych trzech wykresach przy użyciu danych tęczówki (nie dostarczyłeś odtwarzalnego przykładu), nie miałem problemu z uzyskaniem jednego wykresu w podsekcji. –

+1

"Pojawiają się wykresy, ale pokazują one jeden po drugim." Może to być spowodowane lateksem, które renderuje zmienne liczby, spróbuj zmniejszyć rozmiar figury i umieścić '\ pagebreak" po każdym wykresie, aby zobaczyć, czy to pomaga. –