停止 R 调用 XQuartz

Stop R calling XQuartz

我在 macOS 上并从终端使用 R。 R 经常启动 XQuartz,例如 install.packages("digest"):

> install.packages("digest")
Installing package into ‘~/Library/R/3.5/library’
(as ‘lib’ is unspecified)
--- Please select a CRAN mirror for use in this session ---

XQuartz window 打开 Secure CRAN mirrors

另一个例子是当有更新的包可用并且 XQuartz window 打开时

These packages have more recent versions available. Which would you like to update?
digest (0.6.18 -> 0.6.19) [CRAN]

如何强制 R 从终端询问问题而不是打开 XQuartz?

那是因为 MacOSX 需要 XQuartz。在 R MacOSX FAQ:

The quartz() device is the native graphic device in R for Mac OS X. ... The quartz() device can be used from R.APP or a suitable build of R running at the Mac console. Where supported it is the default graphics device. ... The quartz device allows for interaction.

一个选项可以在安装包时设置您的 CRAN 存储库:

install.packages("digest", repos = "https://cran.r-project.org")

您还可以在代码开头使用 options:

定义您的 CRAN 存储库
options(repos = structure(c(CRAN = "your_cran_mirror")))

这是一个 CRAN mirros 列表,您可以从中选择最适合您的情况。

您还可以在 Rprofile.site 上设置这些首选项 site-wide,在 macOS 上为 /Library/Frameworks/R.framework/Resources/etc/Rprofile.site,其中:

local({r <- getOption("repos")
       r["CRAN"] <- "http://cran.r-project.org"
       options(repos=r)})

P.S.: 后面复制自this post.

尽管 XQuartz 是 Mac 上 R 的原生图形设备,但实际上仍然可以直接控制这些菜单的显示位置。通过向您的 .Rprofile 添加一行,您可以强制 R 直接在控制台中提问,正如您所问的那样:

options("menu.graphics" = FALSE)

真正发生的是函数 install.packages 实际上正在调用 utils::menu,它向用户显示一个选择菜单。函数 menu 本身以两种模式运行:如果它的 graphics 参数是 TRUE,那么它会尝试在默认图形设备中显示菜单——在这种情况下,XQuartz window---否则将在控制台中显示文本菜单。此行为由全局选项 menu.graphics.

控制