You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下R包digestR安装报错:‘windows’未被grDevices导出

问题:R包digestR在Ubuntu测试时抛出windows对象未导出错误

我在GitHub上测试R包digestR,Windows环境运行正常,但Ubuntu环境执行时抛出错误并终止:

R: Error: object ‘windows’ is not exported by 'namespace:grDevices'

使用的R版本是4.3.1,且我的代码里并没有调用windows()函数。以下是报错回溯信息和包的DESCRIPTION文件内容:

报错回溯

Error: Installation failed.
See ‘/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/RtmpkuDi7E/file70d95f7b4613/digestR.Rcheck/00install.out’ for details.
* DONE

Status: 1 ERROR, 1 NOTE
See
  ‘/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/RtmpkuDi7E/file70d95f7b4613/digestR.Rcheck/00check.log’
for details.

── R CMD check results ────────────────────────────────────── digestR 0.1.0 ────
Duration: 18.6s

❯ checking whether package ‘digestR’ can be installed ... ERROR
Error:   See below...

❯ checking package dependencies ... NOTE
  Depends: includes the non-default packages:
    'dplyr', 'ggplot2', 'ggridges', 'Rcpp', 'tcltk', 'tcltk2',
    'magrittr', 'future', 'biomaRt', 'futile.logger', 'shiny'
  Adding so many packages to the search path is excessive and importing
  selectively is preferable.

── Install failure ─────────────────────────────────────────────────────────────

* installing *source* package ‘digestR’ ...
** using staged installation
** R
** inst
** byte-compile and prepare package for lazy loading
Warning messages:
1: package ‘dplyr’ was built under R version 4.1.2 
2: package ‘ggplot2’ was built under R version 4.1.2 
3: package ‘ggridges’ was built under R version 4.1.2 
4: package ‘magrittr’ was built under R version 4.1.2 
5: package ‘biomaRt’ was built under R version 4.1.2 
Error: Error: object ‘windows’ is not exported by 'namespace:grDevices'
Execution halted
ERROR: lazy loading failed for package ‘digestR’
* removing ‘/private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/RtmpkuDi7E/file70d95f7b4613/digestR.Rcheck/digestR’

1 error ✖ | 0 warnings ✔ | 1 note ✖
Error: Error: R CMD check found ERRORs
Execution halted
Error: Process completed with exit code 1.

DESCRIPTION文件内容

Package: digestR
Type: Package
Title: DigestR Package for Data Digestion
Version: 0.1.0
Author: John Doe
Maintainer: John Doe <johndoe@example.com>
Description: 
    本包提供数据处理、可视化及转换功能,可与主流数据可视化包无缝集成,提供高级分析工具。
License: GPL-3
Encoding: UTF-8
LazyData: true
biocViews:
Depends: 
    R (>= 3.5.0),
    dplyr,
    ggplot2,
    ggridges,
    Rcpp,
    tcltk,
    tcltk2,
    magrittr,
    future,
    biomaRt,
    futile.logger,
    shiny
Suggests:
    testthat,
    knitr,
    rcmdcheck,
RoxygenNote: 7.2.3
VignetteBuilder: knitr

解决方案

1. 问题根源

windows()是grDevices包中仅Windows系统可用的图形设备函数,Linux/Unix系统(如Ubuntu)中不存在该导出对象。你代码里没直接调用,但大概率是依赖包(尤其是tcltk/tcltk2这类GUI相关包)在跨平台环境中触发了该函数的间接引用。

另外,DESCRIPTION中用Depends加载所有依赖会将包全部导入全局环境,不仅违反R包开发规范,还大幅增加了跨平台冲突的概率,这也是官方给出NOTE的原因。

2. 具体修复步骤

  • 调整依赖声明:将Depends中的非核心包全部移至Imports,仅保留R (>=3.5.0)在Depends中。之后在代码中通过包名::函数名明确调用依赖函数(如dplyr::mutate()),或在Roxygen注释中用@importFrom选择性导入所需函数,避免全局环境污染。
  • 添加跨平台条件判断:针对tcltk/tcltk2的使用场景,用系统类型判断规避Windows专属代码在Ubuntu上执行:
    if (.Platform$OS.type == "windows") {
      # 仅Windows环境执行的GUI相关逻辑
      library(tcltk2)
      # ... 其他Windows专属操作
    }
    
  • 更新依赖包版本:报错显示多个依赖包基于R 4.1.2构建,在R 4.3.1环境中存在兼容性风险。重新安装所有依赖包,确保版本适配当前R环境。

3. 验证修复

修改后在Ubuntu环境重新运行R CMD check,确认错误消失;同时保留Windows环境测试,确保原有功能不受影响。

内容的提问来源于stack exchange,提问作者Soerendip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:53:09