繁体   English   中英

"来自变量的 Rmarkdown 块名称"

[英]Rmarkdown Chunk Name from Variable

如何使用变量作为块名称? 我有一个被多次调用的子文档,我需要以这样一种方式推进块标签,而不是交叉引用它们。

像这样的东西:

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

大师.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
```

如下建议在编织和渲染之前将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))
```

编织并渲染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")

希望能帮助到你。 干杯!

如果您要达到这种复杂性水平,建议您看一下brew包装。

这提供了一个模板引擎,您可以在其中动态创建用于编织的Rmd。

您可以在外部brew环境中引用R变量,并从那里构建动态Rmd。

knitr::knit_expand() 可以使用动态块名称。 使用 {{arg_name}} 在子文档中引用参数,包括在块头中。

所以我的父文档包含:

```{r child_include, results = "asis"}
###
# Generate a section for each dataset
###
species <- c("a", "b")

out <- lapply(species, function(sp) knitr::knit_expand("child.Rmd"))

res = knitr::knit_child(text = unlist(out), quiet = TRUE)
cat(res, sep = "\n")
```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM