Roxygen2-как @ export генератор ссылочных классов?


Например, предположим, что у меня есть следующий пакет под названием Test и я хочу экспортировать класс A:

# In /R/Test.R:
#' @docType package
#' @import methods
#' @exportClass A
A <- setRefClass("A", methods = list(foo = identity))
{[7] однако, после строительства и нагрузки, я получаю следующее сообщение об ошибке при использовании A'генератор с:
> library(Test)
> A()$foo(1)
Error: could not find function "A"

Я проверил содержимое моего файла NAMESPACE все в порядке:

exportClasses(A)
import(methods)

Так что же не так? Почему мой генератор классов не экспортируется?

1 7

1 ответ:

Если вы добавите @export A, то функция генератора A также будет экспортирована, например

#' A class description
#'
#' @import methods
#' @export A
#' @exportClass A
A = setRefClass('A',
  fields=list(name='character', n='numeric'),
  methods=list(
    hello=function() {
      "A greeting"
      return(paste0('Hello, ', name))
    }
  )
)

Важно: не забудьте явно упомянуть A в директиве экспорта, иначе она не будет работать, в отличие от функций.

Альтернативно, так как класс является экспортируемым, вы все еще можете использовать класс через new(), например

> a = new('A', name='Josh', n=12345)
> a$hello()
 [1] "Hello, Josh"

Но легко просто добавить экспорт.