2016-10-09 3 views
1

Ich habe eine benutzerdefinierte Funktion erstellt, die mfrow auf nxn setzt und n^2 Streudiagramme mit mehreren Datensätzen für jedes Diagramm basierend auf einer Eingabeliste von Datenrahmen erstellt. Die Unterschrift meiner Plotten Funktion sieht wie folgt aus:R Markdown lässt das benutzerdefinierte Diagramm verschwinden, wenn ich echo = FALSE setze

plot.return.list<-function(df.list,num.plot,title) 

Wo df.list ist meine Liste von Datenrahmen ist num.plot die Gesamtzahl der Stellplätze (verwendet mfrow eingestellt) zu erzeugen und title ist die gesamte Handlung Titel (der Funktion erzeugt Titel für jedes einzelne Sub-Diagramm).

Dies erstellt Plots gut, wenn ich die Funktion von der Konsole aus ausführen. Aber ich versuche, diese Zahl in einen Abschlag Dokument zu erhalten RStudio verwenden, etwa so:

```{r, fig.height=6,fig.width=6} 
plot.return.list(f.1.list,4,bquote(atop("Numerical Approximations vs Exact Soltuions for " 
,dot(x)==-1*x*(t)))) 
``` 

Da ich nicht die echo Option in meiner {r} Anweisung festgelegt habe, diese Drucke sowohl den Plotten-Code als auch die Handlung selbst. Allerdings, wenn meine erste Zeile liest stattdessen:

{r, fig.height=6,fig.width=6,echo=FALSE} 

Dann verschwinden sowohl der Code UND die Handlung aus dem endgültigen Dokument.

Wie mache ich die Handlung OHNE den Code erscheinen? Laut dem Beispiel, das RStudio gibt, sollte die Einstellung echo=FALSE die Handlung ohne den Code erscheinen lassen, aber das ist nicht das Verhalten, das ich beobachte.

EDIT: Ich habe mein Problem bis zu kable verfolgt. Egal, ob ich eine benutzerdefinierte Plot-Helfer-Funktion mache oder nicht, jeder Anruf bei kable tötet meine Handlung. Dies kann in einem Abschlag wiedergegeben werden:

--- 
title: "repro" 
author: "Frank Moore-Clingenpeel" 
date: "October 9, 2016" 
output: pdf_document 
--- 

```{r setup, include=FALSE} 
knitr::opts_chunk$set(echo = TRUE) 
library(knitr) 
options(default=TRUE) 
repro.df<-data.frame((0.1*1:10)%*%t(1:10)) 
``` 
```{r, echo=FALSE} 
kable(repro.df) 
``` 
```{r, fig.height=6,fig.width=6,echo=FALSE} 
plot(repro.df[,1],repro.df[,2]) 
``` 

In diesem Code wird die Handlung nicht zeichnen, weil ich echo auf false gesetzt ist; die Flagge zu entfernen macht die Handlung sichtbar

Beachten Sie auch, dass in meinem Repro-Code, kable eine Tabelle in der letzten Zeile mit einem Haufen Müll produziert - ich weiß nicht, warum, aber das ist nicht wahr für meine vollen Originalcode, und ich glaube nicht, dass es mit meinem Problem zusammenhängt.

+0

Bitte geben Sie ein [reproduzierbares Beispiel] an (http: // stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproduzierbar-Beispiel). –

+0

Ich bin ratlos. Ich erstelle einen Dummy-Datensatz und schließe ihn an meine Funktion an, und plötzlich funktioniert es wie erwartet in der Abschrift. Ich habe keine Ahnung, was ich für Repro mache, ist anders als mein ursprünglicher Code. Es ist die exakt gleiche Formel, mit den gleichen formatierten Daten, die darin steckten – Frank

+0

Ahhh, das ist die frustrierendste Art von Bug! Wie wäre es, wenn Sie "stricken" (statt "rendern") und die "md" -Datei untersuchen würden? Wenn das funktioniert, dann mischt etwas über "render" (das ist im Wesentlichen "stricken" und dann "Pandoc") Dinge auf? Oder wir können rmarkdown ausschließen und uns auf knitr konzentrieren. –

Antwort

1

Danke für das reproduzierbare Beispiel. Daraus kann ich erkennen, dass das Problem darin besteht, dass Sie keine neue Zeile zwischen Ihrem Tabellen-Chunk und Ihrem Plot-Chunk haben.

Wenn Sie dies stricken und die MD-Datei von stricken untersuchen (oder html_document als Ihr Ausgabeformat festlegen und keep_md: true haben, um es zu sehen), würden Sie sehen, dass der Tabellencode und der Plotcode durch keine getrennt sind Neue Zeile. Pandoc benötigt dies, um das Ende der Tabelle zu begrenzen. Ohne es, denkt es, dass Ihr ![](path/to/image.png) Teil der Tabelle ist und es daher als eine "Junk-Line" in der Tabelle und nicht als ein Bild für sich darstellt.

Fügen Sie einfach einen Zeilenumbruch zwischen den beiden Chunks hinzu und alles wird gut. (Tabellen müssen mit Leerzeilen umgeben sein).

(Ich weiß, dass Sie LaTeX kompilieren, so dass es Sie verwirren kann, warum ich über Abschlags spreche Falls dies der Fall, wenn Sie Rmd tun -.> PDF, Rmarkdown knit von RMD auf MD gehen verwendet, und dann pandoc von MD zu Tex zu gehen. Deshalb müssen Sie noch sicherstellen, dass Ihr Abschlag OK aussieht).

+0

Natürlich war es etwas Einfaches. Diese Newline hat es behoben. – Frank

Verwandte Themen