Подтвердить что ты не робот

Экспорт не-S3-методов с точками в имени с помощью roxygen2 v4

Поскольку 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 как устаревшую функцию для совместимости.)

4b9b3361

Ответ 1

Как отметил г-н Флик, добавление полного имени функции в линию roxygen работает правильно. Если я изменил строку на:

#' @export check.arg

то файл NAMESPACE содержит:

export(check.arg)