2017-06-28 2 views
1

Ich habe diesen Code für eine r Markdown-Datei. Seite 2 wird statisch gemacht und zeigt SUBJECt 1 und dann plot (4).dynamische r Abschriften Seiten zeigen nicht korrekt Plot und Titel

Dann möchte ich Schleife und erstellen 3 weitere Seiten, die

THEMA 2 img der Parzelle 4

THEMA 3 img der Parzelle 4

THEMA 4 img des Plots 4

zeigen

So werden die Seiten mit dem Titel SUBJECT 2 3 und 4 dynamisch erstellt, aber wenn Sie den Code ausführen, zeigen die Titel "# SUBJECT 3" und "# SUBJECT 4" und die Plots nicht sho w auf. Kannst du helfen?

--- 
output: 
    pdf_document: 
    toc: yes 
    keep_tex: TRUE 
    setspace: singlespacing 
    geometry: margin=1.1cm 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = FALSE , comment = NA, message= FALSE, warning = FALSE) 

``` 

```{r one, include= FALSE} 
ta = data.frame(group = c("A,h","b, j "),`10-20`= c(1,"-"),`34-44`= c("-","-") ,check.names = FALSE) 
ta 
``` 

\newpage 
# SUBJECT 1 

```{r echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, results='asis'} 
plot(4)  
``` 

\newpage 
```{r echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, results='asis'} 
for(i in 2:4){  
    cat(paste0("# SUBJECT ",i)) 
    plot(4) 
    cat("\\newpage") 
} 
``` 

Antwort

1

Der folgende Code funktioniert (mit ein paar kleinen Änderungen und ich werde es später erklären). Ich setze die Code-Chunk-Optionen, fig.keep='all' und fig.align='left', die Verwendung der ersten Option ist, um alle Bilder zu speichern, die Sie in den Code-Chart plotten, die zweite Option ist knitr mitzuteilen, einen Befehl zu verwenden, um die Plots zu verpacken, so dass sie gewonnen haben ' t versauen mit anderen Abschriftencodes. Ob die Bilder links, zentriert oder rechts ausgerichtet sind, macht keinen Unterschied, außer den Positionen der Bilder, aber Sie müssen die Option eingestellt haben.

Und Sie können feststellen, dass im Code, ich ändern plot(4) zu plot(i). Denn in meinem Experiment gibt plot(4) nur zwei Plots statt drei. Dies ist kein knitr Problem, es hat etwas mit evaluate::evaluate zu tun, die auf knitr beruht. Zum Beispiel, wenn Sie so etwas wie

r <- 'for (i in 2:4){cat(paste0("\\newpage\n # SUBJECT ",i, "\n")); plot(4)}' 

rr <- evaluate::evaluate(r) 

laufen Dann rr nur zwei Parzellen enthalten. Ich denke, das liegt daran, dass alle Diagramme in Ihrem ursprünglichen Beispiel identisch sind. Da in deinem realen Gebrauch die Plots nicht gleich sein sollten (habe ich recht?), Denke ich, das ist okay.

--- 
output: 
    pdf_document: 
    toc: yes 
setspace: singlespacing 
geometry: margin=1.1cm 
--- 

    ```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = FALSE , comment = NA, message= FALSE, warning = FALSE) 

``` 

```{r one, include= FALSE} 
ta = data.frame(group = c("A,h","b, j "),`10-20`= c(1,"-"),`34-44`= c("-","-") ,check.names = FALSE) 
ta 
``` 

\newpage 
# SUBJECT 1 

```{r echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, results='asis'} 
plot(4)  
``` 

```{r echo= FALSE, comment = FALSE, message= FALSE, warning = FALSE, results='asis', fig.keep='all', fig.align='left'} 
for (i in 2:4){  
    cat(paste0("\\newpage\n # SUBJECT ",i, "\n")) 
    plot(i) 
} 
``` 
+0

alle Plots werden wahrscheinlich nicht die gleichen sein, aber weil sie es nicht funktioniert? – user3022875

+0

@ user3022875 Es sind mehrere Probleme aufgetreten. Die Einstellung der Code-Chunk-Option 'fig.align' ist wichtig, damit der Titel korrekt angezeigt wird. Ein identischer Plot ist die Ursache dafür, dass nicht alle Plots angezeigt werden. – Consistency