我正在寻找一种方法来测试R是否是从RStudio运行的。昨天我在Google上找到了答案,但今天却找不到了。但我认为这可能与测试某个系统变量是否被设置有关。
这是来自?rstudio
:
# Test whether running under RStudio
isRStudio <- Sys.getenv("RSTUDIO") == "1"
另外还有rstudioapi::isAvailable()
,但是检查这个不太可靠,因为RStudio似乎并不需要rstudioapi
包才能正常工作。
检查"RStudio"
的.Platform$GUI
选项
is.rstudio = function(){
.Platform$GUI == "RStudio"
}
参见:
在RStudio内部没有运行的概念。 RStudio仅是包装在R周围的IDE层;在一天结束时,它只是启动正常的R可执行文件,您需要将其放在$PATH上以便操作RStudio。
作为代理和R Studio,您可以测试available.packages()来查看'manipulate'软件包是否可用,或者通过较短的版本查看RStudio是否已将自己添加到.libPaths()
内容中:
R> any(grepl("RStudio", .libPaths()))
[1] TRUE
R>
R>
2020年5月或8年后进行编辑 这个问题确实存在,可以从内部查询各种内容。这是来自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
。
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
。 - miguelmorin当我启动RStudio时,工具:rstudio似乎在搜索路径的第二个位置上。它有一个名为"RStudio.version"的函数,该函数未经记录,但似乎返回RStudio版本字符串:
> 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()
。 - krlmlrrstudioapi::isAvailable()
assertive::is_rstudio()
(列表不全)
assertive
和assertive.reflections
包分别包含其他功能,用于检查其他IDE、RStudio的桌面/服务器版本以及各种R
版本(例如alpha、beta、devel、release、patched等)。
为了增加正确的猜测,这里有一条来自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 ...
checkRstudio <- function () {
return ("tools:rstudio" %in% search())
}
我自己对R也比较新,但是我相信为了运行Rstudio,必须加载“tools:rstudio”包。
检测代码是否在主RStudio R会话中运行(不依赖于rstudioapi
包)的最可靠方法是:
commandArgs()[[1L]] == "RStudio"
对其他答案的一些评论:
仅检查环境变量可能不足,因为"RSTUDIO"
环境变量也将被从主R会话启动的子R进程继承。
RStudio直到运行R配置文件(例如~/.Rprofile
)之后才初始化其R基础设施,因此在这种情况下,检查像.Platform$GUI == "RStudio"
或"tools:rstudio" %in% search()
或rstudioapi::isAvailable()
这样的内容将无法提供所期望的结果。
只有在Mac上,才能使用Sys.getenv来获取答案。
平台 x86_64-apple-darwin10.8.0
版本字符串 R version 3.1.0 (2014-04-10)
Sys.getenv("RSTUDIO")=="1" [1] TRUE
RStudio.version() 错误:找不到函数“RStudio.version”
any(grepl("RStudio", .libPaths())) [1] FALSE
.libPaths() [1] "/Library/Frameworks/R.framework/Versions/3.1/Resources/library"
.Platform$GUI
在用户执行.Rprofile
之后才被设置(由于某些复杂的原因),因此它不能满足启动脚本的需求。一般来说,最好检查RSTUDIO
环境变量。 - Kevin UsheySys.getenv("RSTUDIO") == "1"
?不过,查看由krlmlr提到的rstudioapi::isAvailable
,也显示在检查中使用了.Platform$GUI
。 - coatlessrstudioapi
中的一个错误 :) 我会提交一个问题! - Kevin UsheyRSTUDIO
环境变量不同。 - Hugh