S4错误:可以定义方法,但泛型函数是隐式的,不能更改

时间:2018-05-28 08:36:25

标签: r r-package s4

我正在通过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 :(得分:1)

作为内置函数,无法更改泛型+的定义,如错误消息所示。如果你用这种方式重新定义它,R会破坏大部分。

+被定义为有两个参数e1e2。使用此框架,您可以将示例修改为

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

需要注意的一点是e1始终是第一个参数,即使使用参数名称也是如此。因此"+"(e2=A,e1=B)等于A+B,而不是B+A