是否可以仅为特定引擎设置块默认值?
Is it possible to set chunk defaults only for a specific engine?
我在 RMarkdown 文档中使用 SQL 块,我希望 echo
选项对所有块默认为 FALSE
– 但仅对 sql
块,而不是其他。
我知道我可以设置 knitr::opts_chunk$set(echo = TRUE)
,但这会为所有块设置它。
为, the proper way to do this is to use an option hook。以下为 sql
块设置 echo=FALSE
,否则为 echo=TRUE
:
knitr::opts_hooks$set(echo = function(options) {
options$echo <- options$engine != "sql"
return(options)
})
我将在下面留下我的原始答案……以供娱乐。这是一种解决方法,在没有选项挂钩的假设平行宇宙中是必需的。
您可以通过opts_current$get("engine")
查询当前引擎。基于此,您可以使用以下函数(并根据需要对其进行扩展)来确定 echo
的所需值:
conditionalDefaut_echo <- function() {
return(opts_current$get("engine") != "sql")
}
挑战在于在解析新块时评估此函数。这可以通过 quote
:
来实现
opts_chunk$set(echo = quote(conditionalDefaut_echo()))
老实说,我不确定这有多可靠——这种 metaprogramming 取决于 knitr 的内部运作,将来可能会崩溃。 (也许一辉要评论这个……)
引擎 r
和 asis
的完整示例,其中 echo
对于 asis
块是 FALSE
,否则 TRUE
:
```{r}
library(knitr)
conditionalDefaut_echo <- function() {
return(opts_current$get("engine") != "asis")
}
opts_chunk$set(echo = quote(conditionalDefaut_echo()))
```
```{asis}
I'm invisible.
```
```{r}
print(1) # code visible
```
我在 RMarkdown 文档中使用 SQL 块,我希望 echo
选项对所有块默认为 FALSE
– 但仅对 sql
块,而不是其他。
我知道我可以设置 knitr::opts_chunk$set(echo = TRUE)
,但这会为所有块设置它。
为sql
块设置 echo=FALSE
,否则为 echo=TRUE
:
knitr::opts_hooks$set(echo = function(options) {
options$echo <- options$engine != "sql"
return(options)
})
我将在下面留下我的原始答案……以供娱乐。这是一种解决方法,在没有选项挂钩的假设平行宇宙中是必需的。
您可以通过opts_current$get("engine")
查询当前引擎。基于此,您可以使用以下函数(并根据需要对其进行扩展)来确定 echo
的所需值:
conditionalDefaut_echo <- function() {
return(opts_current$get("engine") != "sql")
}
挑战在于在解析新块时评估此函数。这可以通过 quote
:
opts_chunk$set(echo = quote(conditionalDefaut_echo()))
老实说,我不确定这有多可靠——这种 metaprogramming 取决于 knitr 的内部运作,将来可能会崩溃。 (也许一辉要评论这个……)
引擎 r
和 asis
的完整示例,其中 echo
对于 asis
块是 FALSE
,否则 TRUE
:
```{r}
library(knitr)
conditionalDefaut_echo <- function() {
return(opts_current$get("engine") != "asis")
}
opts_chunk$set(echo = quote(conditionalDefaut_echo()))
```
```{asis}
I'm invisible.
```
```{r}
print(1) # code visible
```