R CMD check提示S4类XPSCoreLine未文档化的问题求助
解决方案
1. 规范S4类的Roxygen注释
确保类的注释紧贴在setClass()调用上方,包含必要标签:
#' XPSCoreLine类 #' #' 存储XPS核心谱线数据的S4类 #' #' @slot energy 数值向量,存储能量值 #' @slot intensity 数值向量,存储强度值 #' @exportClass XPSCoreLine setClass( "XPSCoreLine", slots = list( energy = "numeric", intensity = "numeric" ) )
核心要求:必须包含@exportClass XPSCoreLine,且生成的XPSCoreLine.RD中要有\alias{XPSCoreLine}和\alias{class:XPSCoreLine}(可直接打开RD文件确认)。
2. 正确文档化S4方法
针对hasBoundaries泛型及对应XPSCoreLine方法,按两种场景处理:
场景1:自定义泛型需统一文档
先给泛型添加完整注释并导出:
#' 检查对象是否含边界信息 #' #' @param x 待检查对象 #' @return 逻辑值,TRUE表示有边界,FALSE反之 #' @export setGeneric("hasBoundaries", function(x) standardGeneric("hasBoundaries"))
再在方法上方用@rdname关联到泛型文档:
#' @rdname hasBoundaries #' @export setMethod("hasBoundaries", signature = "XPSCoreLine", function(x) { !is.null(x@energy) && length(x@energy) > 0 })
场景2:为方法单独添加文档
若无需关联泛型,直接给方法加注释并导出:
#' 检查XPSCoreLine对象的边界信息 #' #' @param x XPSCoreLine类对象 #' @return 逻辑值,TRUE表示有边界,FALSE反之 #' @export setMethod("hasBoundaries", signature = "XPSCoreLine", function(x) { !is.null(x@energy) && length(x@energy) > 0 })
核心要求:方法必须加@export,且生成的RD文件中要有\alias{hasBoundaries,XPSCoreLine-method}。
3. 清理缓存并重新生成文档
旧缓存可能导致异常,执行以下步骤:
- 删除包目录下
man/文件夹内所有旧RD文件 - 删除
NAMESPACE文件 - 运行
devtools::document(clean = TRUE)强制重新生成文档与NAMESPACE - 再执行
devtools::check()
4. 检查包配置与结构
- 确认
DESCRIPTION文件包含Roxygen: list(markdown = TRUE)(若用markdown注释),或至少指定Roxygen版本 - 确保类和方法的R脚本都放在
R/目录下,无文件被忽略 - 手动运行
roxygen2::roxygenize(roclets = c("rd", "collate", "namespace")),强制生成所有必要内容
5. 验证RD文件内容
打开XPSCoreLine.RD,确认包含:
\alias{XPSCoreLine} \alias{class:XPSCoreLine}
打开方法对应的RD文件(如hasBoundaries.RD),确认包含:
\alias{hasBoundaries} \alias{hasBoundaries,XPSCoreLine-method}
内容的提问来源于stack exchange,提问作者GSperanza
相关产品推荐
相关产品推荐

