【发布时间】:2012-09-05 12:45:14
【问题描述】:
我正在寻找一种方法来测试 R 是否从 RStudio 运行。出于某种原因,我昨天可以在 google 上找到答案,但今天找不到,但我认为这与测试是否设置了某个系统变量有关。
【问题讨论】:
我正在寻找一种方法来测试 R 是否从 RStudio 运行。出于某种原因,我昨天可以在 google 上找到答案,但今天找不到,但我认为这与测试是否设置了某个系统变量有关。
【问题讨论】:
这是来自?rstudio:
# Test whether running under RStudio
isRStudio <- Sys.getenv("RSTUDIO") == "1"
还有rstudioapi::isAvailable(),但检查它并不可靠,因为RStudio 似乎并不真的需要rstudioapi 包才能正常工作。
【讨论】:
检查.Platform$GUI 选项以获取"RStudio"
is.rstudio = function(){
.Platform$GUI == "RStudio"
}
见:
【讨论】:
.Platform$GUI 直到 用户 .Rprofile 被执行(出于复杂的原因)之后才设置,因此获胜'不足以启动脚本。一般来说,检查RSTUDIO 环境变量是首选。
Sys.getenv("RSTUDIO") == "1"?不过,在 krlmlr 也提到的 rstudioapi::isAvailable 达到峰值时,表明检查中使用了 .Platform$GUI。
rstudioapi 中的一个错误,然后:) 我会打开一个问题!
RSTUDIO 环境变量不同。
manipulate 包中用来区分 IDE 是否为 RStudio 的方法。
没有“在 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。
【讨论】:
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。
当我启动 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()。
截至目前,有一些包包含检查 RStudio 是否正在运行的功能:
rstudioapi::isAvailable()
assertive::is_rstudio()
(列表并非详尽无遗)
assertive 和 assertive.reflections 软件包确实包含额外的功能来检查其他 IDE、RStudio 的桌面/服务器版本以及各种 R 版本(例如,alpha、beta、devel、release、补丁等)
【讨论】:
为了增加猜测的数量,这里有一条来自 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”以便运行。
【讨论】:
options 中调整并在.Rprofile 中更改,以免在启动时加载。
现在可以通过startup 包通过is_rstudio_console 函数获得整洁的解决方案:
startup:::is_rstudio_console()
[1] TRUE
值得补充的是,此函数检查两个环境变量 RSTUDIO,@krlmr 和 RSTUDIO_TERM 在 the answer 中提到过,在前面的答案中似乎没有提到时刻。
function ()
{
(Sys.getenv("RSTUDIO") == "1") && !nzchar(Sys.getenv("RSTUDIO_TERM"))
}
【讨论】:
在 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"
【讨论】: