2016-06-08 15 views
5

Jak mogę użyć zmiennej jako nazwy porcji? Mam dokument podrzędny, który jest wywoływany wiele razy, i muszę awansować etykiety kawałków w taki sposób, żebym mógł je również odwołać.Nazwa porcji Rmarkdown ze zmiennej

coś takiego:

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 potencjalnym rozwiązaniem

Oto jeden potencjalny obejście, inspirowany przez SQL Injection wszechrzeczy ...

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

Interesujące pytanie - więc pytasz o nazwy dynamicznych klocków? Nie jestem pewien, czy jest to możliwe ... Jeśli masz dokładniejsze informacje o tym, co próbujesz zrobić, może istnieć ważne obejście problemu, na przykład tworzenie listy wykresów i wywoływanie pojedynczych naraz z listy. . – C8H10N4O2

+0

Zmodyfikowałem pytanie, aby lepiej odzwierciedlić mój problem. –

+0

@ C8H10N4O2 Opublikowaliśmy potencjalne obejście, wstrzykując "etykietę" w podpis na rysunku. –

Odpowiedz

1

Sugestia do preknit złożyć RMD do innego pliku RMD przed drutach & jak rendering Wynika

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

na drutach & renderować 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") 

Nadzieję, że to pomaga. Twoje zdrowie!

+0

czy to działa tylko dla wyjścia html? –

+0

do renderowania HTML posta Używam '' '%%%' '' do identyfikacji kodów do analizy ... myślę, że potrzebujesz tylko części przed drutami ... ale twoje dynamiczne nagłówki są w dokumencie podrzędnym ... pozwól mi rozwiązać moją odpowiedź i pomyśl jeszcze trochę – chinsoon12