如何检测函数是否在 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>
我正在开发一个需要用户输入的 '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>