Ich habe gerade eine große Blog-Post über diese ausführt.
Lesen Sie mehr at Michael J Williams' blog - Ich habe schamlos den Code gestohlen, so dass mehr Details dort. Denken Sie daran, Chunk-Optionen auf results = "asis" zu setzen.
Angenommen, Sie möchten eine Reihe von Plots mit einer Schleife ausgeben, aber Sie möchten, dass sie verschiedene Größen haben. Definieren Sie die folgende Funktion (wieder, ich bin einfach kopieren-Einfügen hier):
subchunkify <- function(g, fig_height=7, fig_width=5) {
g_deparsed <- paste0(deparse(
function() {g}
), collapse = '')
sub_chunk <- paste0("
`","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=",
fig_height, ", fig.width=", fig_width, ", echo=FALSE}",
"\n(",
g_deparsed
, ")()",
"\n`","``
")
cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE))
}
Und verwenden Sie die Funktion wie diese, die Definition einer eigenen Figur Größen:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
subchunkify(g, 10, 3)
subchunkify(g, 7, 7)
```
oder lassen Sie die Daten definieren die Größen:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
for (i in seq(2, 5)) {
subchunkify(g, i/2, i)
}
```
In der Zeit nach Michael warnt davor, dass man vorsichtig sein muss:
Da wir results = 'asis' verwenden, wenn wir Text oder Überschriften oder irgendetwas anderes aus dem Chunk ausgeben wollen, müssen wir Raw HTML und nicht Markdown verwenden, und dazu müssen wir cat() verwenden. nicht drucken(). Zum Beispiel:
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
cat('<h2>A Small Square Plot</h2>')
subchunkify(g, 3, 3)
Auch nicht meine Arbeit ... Kopf auf mehr als auf diese lovely blog post für weitere Details. Hoffe das funktioniert für dich.
Ich mag diese Antwort, ich wünschte nur, es gäbe einen Weg, knitr in den aktuellen Chunk zu schauen (anstatt es vorher definieren zu müssen). Ich habe mit "vorher" gespielt und versucht zu sehen, ob ich etwas daraus machen kann. Bisher keine Würfel. –
@BrandonBertelsen Ich verstehe das, aber "knitr" muss das grafische Gerät (mit einer geeigneten Größe) * vor * Auswertung des Chunks öffnen, so dass Sie den Code in einem vorherigen Chunk auswerten müssen, um die Objekte in einem letzteren zu verwenden Stück. –
@BrandonBertelsen Ich kann nicht besser als Yihui sagen. Nur für mich ist es besser für die Lesbarkeit, alle Parameter in einem Chunck zu setzen, zum Beispiel init.chunck. – agstudy