如何检测R中是否有OpenGL设备?

How to detect whether there's an OpenGL device in R?

我正在 运行通过 Github 操作对我当前正在编写的包执行 R CMD CHECK。它在没有 OpenGL 设备的 Mac 平台上是 运行,所以 R CMD CHECK 失败,因为我 运行 rgl 包在例子。我认为当我提交包时这对 CRAN 来说不是问题,我相信 CRAN 平台都有一个 OpenGL 设备,但我希望 R CMD CHECK 与 Github 操作一起使用。如何检测是否有 OpenGL 设备?如果可能的话,我会将示例更改为

if(there_is_openGL){
  library(rgl)
  ......
} 

编辑

感谢user2554330的回答,我找到了解决办法。必须在 yaml 文件中设置环境变量 RGL_USE_NULL=TRUE。环境变量在 env 部分中定义。我的yaml文件如下(其实这是Ubuntu平台,不是Mac平台):

on:
  push:
    branches: [main, master]
  pull_request:
    branches: [main, master]

name: R-CMD-check

jobs:
  R-CMD-check:
    runs-on: ubuntu-latest
    env:
      GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
      R_KEEP_PKG_SOURCE: yes
      RGL_USE_NULL: TRUE
    steps:
      - uses: actions/checkout@v2

      - uses: r-lib/actions/setup-r@v1
        with:
          use-public-rspm: true

      - uses: r-lib/actions/setup-r-dependencies@v1
        with:
          extra-packages: rcmdcheck

      - uses: r-lib/actions/check-r-package@v1

我认为很难做你想做的事,因为有几种方法 rgl 初始化可能会失败:你可能没有可用的 X11,X11 可能不支持你配置的显示器上的 OpenGL,等等。

如果您总是 运行 在同一台机器上进行测试,您可能可以找出失败的地方并以其他方式检测到,但更容易告诉 rgl 不要尝试在加载之前使用 OpenGL。

对于测试,最简单的方法是在 运行 R 之前设置环境变量 RGL_USE_NULL=TRUE,或者在尝试加载 rgl 之前从 R 内部设置环境变量。在 R 会话中,您可以在加载 rgl 之前使用 options(rgl.useNULL = TRUE) 以获得相同的结果。

rgl 不使用 OpenGL 时,您仍然可以使用 rglwidget() 在浏览器中生成显示,并且有一些方法可以自动更新显示,这在 RStudio 或类似的 GUI 中可能很有用: 使用 options(rgl.printRglwidget = TRUE, rgl.useNULL = TRUE).