Как делает Roxygen для обработки двоичных операторов инфикса (напр. %в%)?
Как простой, конкретный пример:
#' 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 ответа:
Вам нужно избежать
%
s в разделе usage. Кроме того, я думаю, что вам может потребоваться указать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)
У меня были трудные времена с
roxygen
(Говоря оroxygen
неroxygen2
) и операторами инфикса. Вот что сработало с моей установкой (R
2.15.1,roxygen
0.1-3).Первое решение: отредактируйте файл
Rd
каждого оператора инфикса (должен бытьgrapes ... grapes.Rd
) и экранируйте с помощью baskslash каждый%
в\alias
,\usage
и\name
части.Второе решение: укажите теги @name и @usage в документации оператора infix и экранируйте
%
. Вот пример:##' 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 = "")