如何判断代码是否在knitr/rmarkdown上下文中执行?

Ben*_*ker 18 r knitr r-markdown

基于一些简单的测试,interactive()在内部rmarkdown::render()或中运行代码时都是如此knitr::knit2html().也就是说,一个简单的.rmd文件包含

```{r}
print(interactive())
```
Run Code Online (Sandbox Code Playgroud)

提供报告的HTML文件TRUE.

有没有人知道我可以在一个代码块中运行的测试,它将确定它是否是"非交互式"运行,我的意思是"在knit2html()或render()"中?

CL.*_*CL. 25

正如Yihui在github上建议的那样, isTRUE(getOption('knitr.in.progress'))可以用来检测代码是编织还是交互执行.

  • 您尝试过 `!is.null(getOption("knitr.in.progress"))` 吗? (2认同)

Gre*_*gor 6

滚动你自己的一个简单建议:看看你是否可以访问当前的输出格式:

```{r, echo = FALSE}
is_inside_knitr = function() {
        !is.null(knitr::opts_knit$get("out.format"))
}
```

```{r}
is_inside_knitr()
```
Run Code Online (Sandbox Code Playgroud)

当然,您可以检查很多事情——这不是这些功能的预期用途,因此它可能不是最强大的解决方案。