我正在通过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包时,处理此错误的正确方法是什么?我是否应该首先使用+
之外的其他名称创建文档,然后再进行更改?
答案 0 :(得分:1)
作为内置函数,无法更改泛型+
的定义,如错误消息所示。如果你用这种方式重新定义它,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
。