【问题标题】:How to detect if function is called inside Rstudio or Jupyter notebook如何检测函数是否在 Rstudio 或 Jupyter 笔记本中被调用
【发布时间】:2019-11-25 10:30:02
【问题描述】:

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

如何测试这些环境?

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

【问题讨论】:

    标签: r jupyter-notebook rstudio


    【解决方案1】:

    RStudio 还始终设置环境变量 RSTUDIO 等。

    在 RStudio 中:

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

    标准会话:

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

    所以你可以和""比较:

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

    【讨论】:

    • 感谢使用Sys.getenv() 的提示! Jupyterhub 也设置了一些,尽管没有一个很好地命名。对于初学者,我将使用您的解决方案并将any(grepl("JUPYTER",names(Sys.getenv()))) 添加到其中。
    • 我怀疑他们会。这是一种常见的模式(你也会从 RStudio 中看到更多),但我没有启动 Jupyter,而且已经很晚了 :)
    【解决方案2】:

    部分答案:

    为了测试 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

    【讨论】:

      猜你喜欢
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      相关资源
      最近更新 更多