2016-06-08 13 views
5

Wie kann ich eine Variable als Chunk-Name verwenden? Ich habe ein Child-Dokument, das mehrmals aufgerufen wird, und ich muss die Chunk-Labels auf diese Weise weiterleiten, als ich sie auch referenzieren kann.Rmarkdown Chunk Name von Variable

Etwas wie folgt aus:

child.Rmd

```{r } 
if(!exists('existing')) existing <- 0 
existing = existing + 1 
myChunk <- sprintf("myChunk-%s",existing) 
``` 

## Analysis Routine `r existing` 

```{r myChunk,echo = FALSE} 
#DO SOMETHING, LIKE PLOT 
``` 

master.Rmd

# Analysis Routines 

Analysis for this can be seen in figures \ref{myChunk-1}, \ref{myChunk-2} and \ref{myChunk-3} 

```{r child = 'child.Rmd'} 
``` 

```{r child = 'child.Rmd'} 
``` 

```{r child = 'child.Rmd'} 
``` 

EDIT mögliche Lösung

Hier ist eine mögliche Abhilfe, inspiriert von SQL-Injection aller Dinge ...

child.Rmd

```{r } 
if(!exists('existing')) existing <- 0 
existing = existing + 1 
myChunk <- sprintf("myChunk-%s",existing) 
``` 

## Analysis Routine `r existing` 

```{r myChunk,echo = FALSE,fig.cap=sprintf("The Caption}\\label{%s",myChunk)} 
#DO SOMETHING, LIKE PLOT 
``` 
+0

Interessante Frage - also fragen Sie nach dynamischen Chunk-Namen? Ich bin mir nicht sicher, ob das möglich ist ... Wenn Sie genauere Angaben zu dem machen, was Sie vorhaben, gibt es möglicherweise eine Lösung, um eine Liste von Plots zu erstellen und einzeln aus der Liste aufzurufen. – C8H10N4O2

+0

Ich habe die Frage geändert, um mein Problem besser widerzuspiegeln. –

+0

@ C8H10N4O2 Ich habe eine mögliche Problemumgehung gepostet, indem ich das 'Label' in die Bildunterschrift eingefügt habe. –

Antwort

1

Ein Vorschlag der Rmd-Datei in einer anderen Rmd Datei preknit vor Stricken & Rendering als folgt

master.Rmd:

# Analysis Routines 

Analysis for this can be seen in figures `r paste(paste0("\\ref{", CHUNK_NAME, 1:NUM_CHUNKS, "}"), collapse=", ")` 

@@@ 
rmdTxt <- unlist(lapply(1:NUM_CHUNKS, function(n) { 
    c(paste0("## Analysis Routine ", n), 
     paste0("```{r ",CHUNK_NAME, n, ", child = 'child.Rmd'}"), 
     "```") 
})) 
writeLines(rmdTxt) 

@@@ 

child.Rmd:

```{r,echo = FALSE} 
plot(rnorm(100)) 
``` 

& stricken die Rmd machen:

devtools::install_github("chinsoon12/PreKnitPostHTMLRender") 
library(PreKnitPostHTMLRender) #requires version >= 0.1.1 

NUM_CHUNKS <- 5 
CHUNK_NAME <- "myChunk-" 
preknit_knit_render_postrender("master.Rmd", "test__test.html") 

Hoffe, es hilft. Prost!

+0

funktioniert das nur für HTML-Ausgabe? –

+0

für Post-HTML-Rendering verwende ich '' '%%%' '', um Codes zu identifizieren, die analysiert werden sollen ... ich denke, Sie brauchen nur den Vorstrick-Teil ... aber Ihre dynamischen Header sind im untergeordneten Dokument ... lass mich meine Antwort ablehnen und denke noch etwas darüber nach – chinsoon12

Verwandte Themen