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

R包二元运算符roxygen2文档含示例触发警告/错误问题排查

R包自定义二元运算符roxygen2文档示例问题排查

问题描述

在R包中添加自定义二元运算符%nin%并编写roxygen2文档时,出现以下异常:

  • 不添加示例时,文档生成完全正常
  • 使用@example标签会触发包检查警告
  • 使用@examples标签直接导致包检查失败

测试代码

无示例(正常运行)

#' @title
#' 反向值匹配
#'
#' @description
#' \code{%in%}的补集,返回\code{x}中不在\code{y}里的元素。
#'
#' @usage x \%nin\% y
#'
#' @param x 向量
#' @param y 向量
#'
#' @export
#' @rdname nin
#'
#' @export
# -----------------------------------------------------------------------------
"%nin%" <- function(x, y) {
  return( !(x %in% y) )
}
# -----------------------------------------------------------------------------

使用@example(触发警告)

#' @title
#' 反向值匹配
#'
#' @description
#' \code{%in%}的补集,返回\code{x}中不在\code{y}里的元素。
#'
#' @usage x \%nin\% y
#'
#' @param x 向量
#' @param y 向量
#'
#' @export
#' @rdname nin
#'
#' @export
#' @example c(1:3) \%nin\% c(3:5)
# -----------------------------------------------------------------------------
"%nin%" <- function(x, y) {
  return( !(x %in% y) )
}
# -----------------------------------------------------------------------------

使用@examples(检查失败)

#' @title
#' 反向值匹配
#'
#' @description
#' \code{%in%}的补集,返回\code{x}中不在\code{y}里的元素。
#'
#' @usage x \%nin\% y
#'
#' @param x 向量
#' @param y 向量
#'
#' @export
#' @rdname nin
#'
#' @export
#' @examples 
#' c(1:3) \%nin\% c(3:5)
# -----------------------------------------------------------------------------
"%nin%" <- function(x, y) {
  return( !(x %in% y) )
}
# -----------------------------------------------------------------------------

问题根源

  1. @example标签的警告原因:@example的语法要求后面跟示例文件的路径,而非直接写内联代码。你直接把示例代码写在@example后面,roxygen2会误认为这是一个文件名,找不到对应文件就会触发警告。
  2. @examples标签的检查失败原因:包检查时会优先解析示例代码,此时自定义运算符%nin%还未被正确加载到执行上下文,R解析器无法识别这个特殊符号;同时未用反引号包裹运算符,也会让解析器难以正确识别这是一个函数,最终导致检查失败。

解决方案

1. 正确使用@examples并包裹运算符

在@examples块中,用反引号包裹自定义运算符,让R解析器能正确识别,同时移除重复的@export标签:

#' @title
#' 反向值匹配
#'
#' @description
#' \code{%in%}的补集,返回\code{x}中不在\code{y}里的元素。
#'
#' @usage x \%nin\% y
#'
#' @param x 向量
#' @param y 向量
#'
#' @export
#' @rdname nin
#' @examples 
#' # 用反引号包裹运算符,确保解析正确
#' c(1:3) `%nin%` c(3:5)
#' # 验证结果正确性
#' all(c(1:3) `%nin%` c(3:5) == c(TRUE, TRUE, FALSE))
# -----------------------------------------------------------------------------
"%nin%" <- function(x, y) {
  !(x %in% y)
}
# -----------------------------------------------------------------------------

2. 额外注意事项

  • 一个运算符只需要一次@export标签,重复添加无意义。
  • 示例中可以加入结果验证代码,既保证示例可运行,也能辅助包检查环节确认功能正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:01:52