【问题标题】:Check if R is running in RStudio检查 R 是否在 RStudio 中运行
【发布时间】:2012-09-05 12:45:14
【问题描述】:

我正在寻找一种方法来测试 R 是否从 RStudio 运行。出于某种原因,我昨天可以在 google 上找到答案,但今天找不到,但我认为这与测试是否设置了某个系统变量有关。

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    这是来自?rstudio

    # Test whether running under RStudio 
    isRStudio <- Sys.getenv("RSTUDIO") == "1"
    

    还有rstudioapi::isAvailable(),但检查它并不可靠,因为RStudio 似乎并不真的需要rstudioapi 包才能正常工作。

    【讨论】:

      【解决方案2】:

      检查.Platform$GUI 选项以获取"RStudio"

      is.rstudio = function(){
        .Platform$GUI == "RStudio"
      }
      

      见:

      http://thecoatlessprofessor.com/programming/detecting-if-r-is-in-rstudio-and-changing-rstudios-default-graphing-device/

      【讨论】:

      • 不幸的是,这个并不完美 -- .Platform$GUI 直到 用户 .Rprofile 被执行(出于复杂的原因)之后才设置,因此获胜'不足以启动脚本。一般来说,检查RSTUDIO 环境变量是首选。
      • @KevinUshey,对于那些在家关注的人,建议的方法是 krlmlr 提到的:Sys.getenv("RSTUDIO") == "1"?不过,在 krlmlr 也提到的 rstudioapi::isAvailable 达到峰值时,表明检查中使用了 .Platform$GUI
      • 我认为这将是rstudioapi 中的一个错误,然后:) 我会打开一个问题!
      • 请注意,尽管 Kevin 的评论中存在问题,但这可以正确区分在 RStudio 控制台中运行的代码和通过 RStudio 中的终端选项卡运行的代码,这与 RSTUDIO 环境变量不同。
      • FWIW,这是 manipulate 包中用来区分 IDE 是否为 RStudio 的方法。
      【解决方案3】:

      没有“在 RStudio 中运行”。 RStudio 只是一个围绕 R 的 IDE 层;归根结底,它只是启动正常的 R 可执行文件,无论如何您都需要在 $PATH 上拥有以运行 RStudio。

      作为代理和 R Studio 您可以测试 available.packages() 以获取“manipulate”包,或者作为更短的版本查看 RStudio 是否将自身添加到 .libPath() 内容中:

      R> any(grepl("RStudio", .libPaths()))
      [1] TRUE
      R> 
      R> 
      

      在 2020 年 5 月或八年后编辑问题确实出现了,人们可以从内部查询各种事情。这是来自 RStudio 终端的示例:

      $ env | grep -i rstudio | sort
      GIO_LAUNCHED_DESKTOP_FILE=/usr/share/applications/rstudio.desktop
      PATH=[...redacted...]
      RMARKDOWN_MATHJAX_PATH=/usr/lib/rstudio/resources/mathjax-27
      RS_RPOSTBACK_PATH=/usr/lib/rstudio/bin/rpostback
      RSTUDIO=1
      RSTUDIO_CONSOLE_COLOR=256
      RSTUDIO_CONSOLE_WIDTH=111
      RSTUDIO_PANDOC=/usr/lib/rstudio/bin/pandoc
      RSTUDIO_PROGRAM_MODE=desktop
      RSTUDIO_PROJ_NAME=chshli
      RSTUDIO_SESSION_ID=9C62D3D4
      RSTUDIO_SESSION_PORT=13494
      RSTUDIO_TERM=2BD6BB88
      RSTUDIO_USER_IDENTITY=edd
      RSTUDIO_WINUTILS=bin/winutils
      $ 
      

      同样,在 R 会话中:

      R> se <- Sys.getenv()
      R> se[grepl("rstudio",se,ignore.case=TRUE)]
      GIO_LAUNCHED_DESKTOP_FILE        /usr/share/applications/rstudio.desktop
      PATH                             [...also redacted...]
      RMARKDOWN_MATHJAX_PATH           /usr/lib/rstudio/resources/mathjax-27
      RS_RPOSTBACK_PATH                /usr/lib/rstudio/bin/rpostback
      RSTUDIO_PANDOC                   /usr/lib/rstudio/bin/pandoc
      R> 
      

      在 2021 年 8 月或九年后编辑由于这里列出的所有答案在不同的答案中可能对人们来说仍然太多,你也可以从 CRAN 安装包 rstudioapi 然后问它通过rstudioapi::isAvailable() 在RStudio 中返回TRUE,在ESS / 标准R 中返回FALSE

      【讨论】:

      • 这仅在 .libPaths 未被脚本更改时才有效,我的公司设置就是这种情况
      • 好吧,正如他们所说,“如果你打破它,你就可以保留碎片”。
      • 另一种解决方案(但同样,如果您不手动加载 rstudio 也可以;) "package:rstudio" %in% search()
      • 这个在 RStudio 1.1.442 中对我来说失败了,sessionInfo() 给了R version 3.5.0 (2018-04-23), Platform: x86_64-apple-darwin15.6.0 (64-bit), Running under: macOS High Sierra 10.13.6
      【解决方案4】:

      当我启动 RStudio 时,它似乎在搜索路径的位置 2 中有 tools:rstudio。这有一个未记录但似乎返回 RStudio 版本字符串的函数“RStudio.version”:

      > RStudio.version()
      [1] "0.96.316"
      

      所以你可以定义:

      is.RStudio <- function(){
        if(!exists("RStudio.version"))return(FALSE)
        if(!is.function(RStudio.version))return(FALSE)
        return(TRUE)
      }
      

      也许会使用它。

      【讨论】:

      • 也许现在应该是 rstudio::versionInfo()$version 而不是 rstudio::version()
      【解决方案5】:

      截至目前,有一些包包含检查 RStudio 是否正在运行的功能:

      rstudioapi::isAvailable()
      assertive::is_rstudio()
      

      (列表并非详尽无遗)

      assertiveassertive.reflections 软件包确实包含额外的功能来检查其他 IDE、RStudio 的桌面/服务器版本以及各种 R 版本(例如,alpha、beta、devel、release、补丁等)

      【讨论】:

        【解决方案6】:

        为了增加猜测的数量,这里有一条来自 2011 年(冰河时代)的消息

        http://support.rstudio.org/help/discussions/problems/413-location-of-installed-packages

        if (Sys.getenv("RSTUDIO_USER_IDENTITY")!= ""){
        .libPaths(.Library) # Avoid additional libraries } else { # not rstudio ...
        

        【讨论】:

        • 在我的设置中,Sys.getenv("RSTUDIO_USER_IDENTITY") 返回 "" 无论是在 Rstudio 内部还是外部运行
        • 我检查过,它对我来说仍然可以正常工作(Windows 7 桌面版)。我还在运行 Ubuntu 和 RStudio Server 的 Virtual Box 上检查了它。请指定您的设置,以便其他人可以检查。
        • 你想知道什么? packageVersion("rstudio") 返回 '0.97.551',版本返回:平台 x86_64-w64-mingw32 arch x86_64 os mingw32 system x86_64, mingw32 version.string R 版本 3.1.1 (2014-07-10)
        【解决方案7】:

        我发现以下作品适合我

        checkRstudio <- function () {
          return ("tools:rstudio" %in% search())
        }
        

        我自己对 R 有点陌生,但我相信 Rstudio 必然会加载 打包“tools:rstudio”以便运行。

        【讨论】:

        • 到目前为止,它似乎比其他答案更可靠,谢谢
        • 不一定。这可以在options 中调整并在.Rprofile 中更改,以免在启动时加载。
        【解决方案8】:

        现在可以通过startup 包通过is_rstudio_console 函数获得整洁的解决方案:

        startup:::is_rstudio_console()
        [1] TRUE
        

        值得补充的是,此函数检查两个环境变量 RSTUDIO@krlmrRSTUDIO_TERMthe answer 中提到过,在前面的答案中似乎没有提到时刻。

        function ()
        {
            (Sys.getenv("RSTUDIO") == "1") && !nzchar(Sys.getenv("RSTUDIO_TERM"))
        }
        

        【讨论】:

          【解决方案9】:

          在 Mac 上,只有 Sys.getenv 答案有效

          平台 x86_64-apple-darwin10.8.0
          version.string R 版本 3.1.0 (2014-04-10)

          Sys.getenv("RSTUDIO")=="1" [1] 是的

          RStudio.version() 错误:找不到函数“RStudio.version”

          any(grepl("RStudio", .libPaths())) [1] 错误

          .libPaths() [1] "/Library/Frameworks/R.framework/Versions/3.1/Resources/library"

          【讨论】:

            猜你喜欢
            • 2021-11-08
            • 2016-06-29
            • 2021-12-09
            • 1970-01-01
            • 1970-01-01
            • 2021-10-27
            • 2017-08-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多