2016-06-08 18 views
5

Come posso utilizzare una variabile come nome del blocco? Ho un documento figlio che viene chiamato un certo numero di volte, e ho bisogno di far avanzare le etichette del blocco in modo tale da poter anche fare un riferimento incrociato.Nome chunk Rmarkdown dalla variabile

Qualcosa di simile a questo:

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 possibile soluzione

Qui è una potenziale soluzione, ispirata da SQL injection di tutte le cose ...

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 domanda: quindi stai chiedendo dei nomi dinamici dei blocchi? Non sono sicuro che sia possibile ... se si è più specifici su ciò che si sta tentando di fare, potrebbe esserci una soluzione alternativa valida, come la creazione di un elenco di grafici e la chiamata uno alla volta dall'elenco. – C8H10N4O2

+0

Ho modificato la domanda per riflettere meglio il mio problema. –

+0

@ C8H10N4O2 Ho pubblicato una soluzione potenziale, inserendo l'etichetta nella didascalia della figura. –

risposta

1

un suggerimento per preknit il file in un altro file Rmd Rmd prima maglia & il rendering come segue

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

a lavorare a maglia & rendano impossibile il Rmd:

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

Speranza che aiuta. Saluti!

+0

funziona solo per l'output html? –

+0

per il rendering HTML post sto usando '' '%%%' '' per identificare i codici da analizzare ... penso che sia sufficiente la porzione pre-maglia ... ma le intestazioni dinamiche sono nel documento figlio ... lasciami prendere la mia risposta e pensaci un po 'di più – chinsoon12