如何检测函数是否在 Rstudio 或 Jupyter Notebook 中被调用

How to detect if function is called inside Rstudio or Jupyter notebook

我正在开发一个需要用户输入的 'high-level' 函数。函数请求输入的方式应该不同,具体取决于它是在 Rstudio 会话、Jupyter Notebook 还是终端中调用。

如何测试这些环境?

我很难找到这个问题。我一直在考虑使用 interactive()getOption("device") 来推断我所在的位置,但我希望可能有更明确的方法来实现这一点。

部分答案:

要测试 Rstudio,可以使用

.Platform$GUI
# [1] "RStudio" 

对 Windows 和 Linux 都有效。

不幸的是,对于终端和 jupyterhub,这都是 "X11"(在我的 linux 机器上)。在其他平台上也可能是a bunch of other things

但是,如果我们只考虑三种预期情况,这是可行的:

.Platform$GUI != "RStudio" & interactive() #TRUE for terminal

.Platform$GUI != "RStudio" & !interactive() #TRUE for Jupyter

RStudio 还总是设置一个环境变量 RSTUDIO,等等。

在 RStudio 中:

R> Sys.getenv("RSTUDIO")
[1] "1"
R> 

标准 session:

R> Sys.getenv("RSTUDIO")
[1] ""
R> 

所以你可以比较 "":

R> Sys.getenv("RSTUDIO") == ""
[1] TRUE
R>