我想根据块名列表设置块选项“eval”。是否有一个函数来获取knitr中的块名称,例如chunk_name?
这是伪函数名称“chunk_name”的最小示例。
---
output: html_document
---
```{r setup}
eval_chunks <- c('chunk1')
```
```{r chunk1, eval=chunk_name() %in% eval_chunks}
plot(cars)
```
```{r chunk2, eval=chunk_name() %in% eval_chunks}
plot(cars)
```
感谢您的任何建议。如果我的问题不明确,请告诉我。
答案 0 :(得分:11)
自2012年以来,Knitr在一个块内提供了标签(需要更多Google,https://github.com/yihui/knitr/issues/73)。
这是我的示例Rmd文件:
---
output: html_document
---
```{r setup}
library(knitr)
eval_chunks <- c('chunk1', 'chunk3')
```
```{r chunk1, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```
```{r chunk2, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```
```{r chunk3, eval=opts_current$get("label") %in% eval_chunks}
print(opts_current$get("label"))
```
答案 1 :(得分:1)
我认为这个解决方案并不完美,因为它需要在确保评估正确的块时要小心,但它解决了在调用钩子之前评估块选项的问题。简而言之,它不使用钩子,而是使用块选项可以是R表达式的事实。在这种情况下,使用函数e()
,它依赖于全局计数器变量来指示是否应该评估特定的块。因为按顺序评估块,所以这是有效的。在下面的示例中,chunk1
和chunk3
会被评估,但其他的则不会。
---
output: html_document
---
```{r setup}
library("knitr")
.i <- 2 # `setup` is the first chunk, so start at 2
.x <- all_labels() %in% c("chunk1", "chunk3")
e <- function(){
d <- .x[.i]
.i <<- .i + 1
d
}
```
```{r chunk1, eval=e()}
x <- 1
x
```
```{r chunk2, eval=e()}
x <- 2
x
```
```{r chunk3, eval=e()}
x <- 3
x
```
```{r chunk4, eval=e()}
x <- 4
x
```