如何将变量用作块名称?我有一个子文档被多次调用,我需要以一种方式推进块标签,而不是我可以交叉引用它们。
这样的事情:
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'}
```
编辑潜在解决方案
这是一个潜在的解决方法,受到SQL注入所有事情的启发......
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 :(得分:1)
建议在编织和渲染之前将Rmd文件预先编织到另一个Rmd文件中,如下所示
<强> 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))
```
编织&amp;渲染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")
希望它有所帮助。干杯!
答案 1 :(得分:1)
如果您要达到这种复杂程度,建议您使用KILL
软件包。
这提供了一个模板引擎,您可以在其中动态创建用于编织的Rmd。
您可以在外部brew
环境中引用R变量,并从那里构建动态Rmd。