Ошибка S4: методы могут быть определены, но универсальная функция неявна и не может быть изменена - PullRequest
0 голосов
/ 28 мая 2018

Я создаю следующий метод через S4

#' @name +
#' @title Expand outputs 
#' @description
#'
#' Operator outputs of function 'create' 
#'
#' @return expanded creation
#' @exportMethod +
#' @aliases +
#' @export
setGeneric('+', function(dt, ...) standardGeneric('+'))
setMethod('+', signature(dt = 'data.table'), function(dt, out) {
    return(create(dt, out))
})

Я положил следующее в мой пакет R.Когда я запускаю devtools::document(), я сталкиваюсь со следующей проблемой:

Error in setGeneric("+", function(dt, ...) standardGeneric("+")) : 
  ‘+’ dispatches internally;  methods can be defined, but the generic function is implicit, and cannot be changed.

Это кажется фатальной ошибкой, и я не могу создать документацию иначе.

(1) Что означает эта ошибка?Я не уверен, как я должен отладить это.

(2) При создании пакета R, как правильно работать с этой ошибкой?Должен ли я сначала создать документацию с другим именем, кроме +, а затем изменить это?

1 Ответ

0 голосов
/ 07 июня 2018

Как встроенная функция, определение универсального + не может быть изменено, как говорится в сообщении об ошибке.Большая часть R сломается, если вы переопределите его таким образом.

+ определено с двумя аргументами, e1 и e2.Используя эту платформу, вы можете изменить свой пример на

setMethod('+', signature(e1 = 'data.table', e2='ANY'), function(dt, out) {
    return(create(dt, out))
})

. Следует отметить, что e1 всегда является первым аргументом, даже если используются имена аргументов.поэтому "+"(e2=A,e1=B) равно A+B, а не B+A.

...