R是否在GUI中运行?
我注意到以下情况,请单击: 我问了同样的问题,因为我需要知道我的R环境是从终端运行的,还是在GUI类型的环境中运行的 我的问题的动机是,我生成了大量的R是否在GUI中运行?,r,user-interface,command,R,User Interface,Command,我注意到以下情况,请单击: 我问了同样的问题,因为我需要知道我的R环境是从终端运行的,还是在GUI类型的环境中运行的 我的问题的动机是,我生成了大量的.pdf报告,如果用户调用了GUI下生成报告的函数,那么我想使用系统默认的.pdf程序打开报告,但是如果脚本是从命令行运行的,或者是通过命令行上启动的会话运行的,那么这应该被抑制 在RStudio中,如果我运行interactive(),结果是TRUE,如果我在终端打开一个R会话并运行相同的命令,结果也是TRUE,因此,我的问题本质上是,我如何区分
.pdf
报告,如果用户调用了GUI下生成报告的函数,那么我想使用系统默认的.pdf
程序打开报告,但是如果脚本是从命令行运行的,或者是通过命令行上启动的会话运行的,那么这应该被抑制
在RStudio中,如果我运行interactive()
,结果是TRUE
,如果我在终端打开一个R会话并运行相同的命令,结果也是TRUE
,因此,我的问题本质上是,我如何区分?我正在运行MacOSX,但希望答案与mac、unix和windoze相关
干杯,commandArgs()
将输出启动R会话的命令行,.Platform$OS.type
将报告操作系统,因此:
switch(.Platform$OS.type,
windows = if (grepl("Rterm", commandArgs())) cat("terminal\n") else cat("GUI\n"),
...fill in for each other operating system...
)
当您说“在终端上打开R会话”时,您是否打开终端并执行
R
或R CMD BATCH
?echo'interactive()”;R
表示FALSE
,因此它工作正常。问题是,您真的想确定GUI是否正在运行,还是想确定R是否正在交互运行(在这种情况下,interactive()
就足够了)?我执行的是R
,而不是R CMD BATCH
,因此,通过R
打开的会话,或者通过可执行的R脚本运行的会话/usr/bin/env Rscript
应返回FALSE
,如果会话在类似RStudio的环境中运行,则应返回TRUE