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
相关产品推荐
相关产品推荐

