Roxygen如何处理中缀二元运算符(例如%in%)?

时间:2012-12-11 23:01:01

标签: r roxygen roxygen2

作为一个简单的具体例子:

#' Inverse Value Matching
#' 
#' Complement of \code{%in%}. Returns the elements of \code{x} that are
#' not in \code{y}.
#' @usage x %nin% y
#' @param x a vector
#' @param y a vector
#' @export
"%nin%" <- function(x, y) {
  return( !(x %in% y) )
}

但是,当我尝试构建一个包时,该函数似乎被忽略,并且没有生成文档。

http://cran.r-project.org/doc/manuals/r-release/R-exts.html#Documenting-functions似乎有关于二进制中缀函数的单行模糊,但是我很难解析它,以及它对Roxygen文档意味着什么。

2 个答案:

答案 0 :(得分:6)

您需要在使用情况部分中转义% s。另外,我认为您可能需要指定rdname

#' Inverse Value Matching
#' 
#' Complement of \code{%in%}. Returns the elements of \code{x} that are
#' not in \code{y}.
#' @usage x \%nin\% y
#' @param x a vector
#' @param y a vector
#' @export
#' @rdname nin
"%nin%" <- function(x, y) {
  return( !(x %in% y) )
}

这是我在个人包装中的功能。我认为我从未实际使用过该函数,但roxygenize确实创建了一个帮助文件,并且包通过了R CMD check

#' percent in
#' 
#' calculate the percentage of elements of \code{table} that are in \code{x}
#' 
#' @param x vector or NULL: the values to be matched
#' @param table vector or NULL: the values to be matched against
#' @return percentage of elements of \code{x} that are in \code{table}
#' @author gsee
#' @usage x \%pctin\% table
#' @examples
#' letters[1:10] %pctin% letters[1:3] # 30% of the second arg ar in the first
#' @export
#' @rdname PctIn
"%pctin%" <- function(x, table) length(x[x %in% table])/length(x)

答案 1 :(得分:1)

我在roxygen(说到roxygen而不是roxygen2)和中缀运营商时遇到了困难。以下是我的设置(R 2.15.1,roxygen 0.1-3)。

第一个解决方案:编辑每个中缀运算符的Rd文件(应为grapes ... grapes.Rd),并在% \alias \usage的每个\name中使用baskslash进行转义}和%部分。

第二个解决方案:在中缀运算符的文档中指定标记@name和@usage并转义##' Concatenates two strings ##' ##' @name \%+\% ##' @usage \%+\%(x, y) ##' @title Concatenation operator. ##' @param a String. ##' @param b String. ##' @return Same as paste0(a, b). "%+%" <- function(a, b) paste(a, b, sep = "") 。这是一个例子:

{{1}}