Поскольку roxygen2 version 4.0.0, тег @S3method устарел в пользу использования @export.
Теперь пакет пытается определить, является ли функция S3-методом, и автоматически добавляет строку S3method(function,class) в файл NAMESPACE, если она считает, что она одна.
Проблема заключается в том, что если функция не является методом S3, но ее имя содержит ., тогда roxygen иногда делает ошибку и добавляет строку, когда она не должна.
Есть ли способ сказать roxygen, что функция не является методом S3?
В соответствии с запросом здесь воспроизводимый пример.
У меня есть пакет, который импортирует R.oo с функцией с именем check.arg.
library(roxygen2)
package.skeleton("test")
cat("Imports: R.oo\n", file = "test/DESCRIPTION", append = TRUE)
writeLines(
"#' Check an argument
#'
#' Checks an argument.
#' @param ... Some arguments.
#' @return A value.
#' @export
check.arg <- function(...) 0",
"test/R/check.arg.R"
)
roxygenise("test")
Теперь пространство имен содержит строку S3method(check,arg).
check является S3-родовым в R.oo, поэтому roxygen пытается быть умным и угадывающим, что я хочу, чтобы check.arg был методом S3. К сожалению, эти функции не связаны, поэтому я этого не делаю.
(Чтобы упредить предложения, которые я просто переименовал check.arg: это устаревший код, написанный другими, и я создал замену checkArg, но мне нужно оставить check.arg как устаревшую функцию для совместимости.)