我的问题与已经得到回答的问题非常相似,但有一个关键的区别.有几百个,它们看起来都运行得很好.也就是说,当存在编织的RMD脚本时(例如,通过单击RStudio中的"编织"按钮),这些解决方案显示如何获取代码以检测非交互式编织过程正在进行.不幸的是,当用户以交互方式运行相同的脚本时(例如,通过在RStudio中 Select Run All命令Ctrl+Alt+R),它们都不起作用.与在特殊的非交互R会话中执行编织过程的Knit不同,Run All在用户当前所在的同一交互会话中执行RMD命令.我的问题是如何检测这种交互式RMD环境.

我这样做的原因是,我想调用一个调用全局R处理程序的函数,具体地说是progressr::handlers(global = TRUE).全局处理程序函数不能在RMD上下文中运行(可能是因为它们被封装在tryCatch块中,这不允许全局处理程序).所以,我想编写我的代码,让它知道它是从和RMD块运行的,然后在这种情况下不运行.

我以前没有意识到这一点,但显然,R上下文(或者至少是我使用的RStudio)确实知道何时从控制台而不是从RMD块交互运行代码.以下是触发此问题的错误:

enter image description here

然而,同一行代码在控制台上运行良好,没有错误(没有输出,但没有错误-它在后台工作):

enter image description here

以下是try all the solutions proposed for detecting non-interactive execution次的最小可重现RMD文件:

---
title: "Test Rmd self-awareness"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r}
interactive()
```

```{r}
isTRUE(getOption('knitr.in.progress'))
```

```{r}
knitr::opts_knit$get("out.format")
```

```{r}
sys.calls()
```

当我编织这份文件时,下面是我得到的内容的摘录:

enter image description here

rendered Rmd document

非交互式执行工作的解决方案:isTRUE(getOption('knitr.in.progress'))返回TRUE,knitr::opts_knit$get("out.format")返回有意义的输出("markdown"),sys.calls()返回具有rmarkdown::render()knitr::knit()的调用堆栈.但值得注意的是,107 returns 108个.

相比之下,以下是当我interactively单击Run All时的输出:

enter image description here

正如您所看到的,当为100 is 101时,非交互执行的解决方案都不起作用:它们要么返回FALSE,要么返回NULL.因此,我无法断定这些代码行是从RMD块中执行的(如您所见,它们都是从RMD块中执行的).

所以,can anyone help me figure out how to tell if code is running INTERACTIVELY within an R Markdown (Rmd) context?

推荐答案

您可以使用:

identical(getOption("rstudio.notebook.executing"), TRUE)

RStudio在块执行期间管理此选项,并在R Markdown块内以交互方式执行时将其设置为TRUE.

R相关问答推荐

使用case_when和Mutate搜索多个列以寻找条件

使用对管道内单元格的引用生成新变量

r中的stat_difference函数不起作用

根据R中的另一个日期从多列中 Select 最近的日期和相应的结果

如何求解arg必须为NULL或deSolve包的ode函数中的字符向量错误

在垂直轴中包含多个ggplot2图中的平均值

如何得到R中唯一的组合群?

R中的时间序列(Ts)函数计数不正确

如何在科学记数法中显示因子

使用R中的dist()迭代ID匹配的欧几里德距离

从R中的对数正态分布生成随机数的正确方法

函数可以跨多个列搜索多个字符串并创建二进制输出变量

在R中,如何将误差条放置在堆叠的每个条上?

我将工作代码重构为一个函数--现在我想不出如何传递轴列参数

为什么在写入CSV文件时Purrr::Pwalk不起作用

删除在R中的write.table()函数期间创建的附加行

构建一个6/49彩票模拟系统

位置_道奇在geom_point图中不躲避

将每晚的平均值与每晚的值进行比较,统计是否有效?

将Geojson保存为R中的shapefile