【发布时间】:2015-01-11 11:30:59
【问题描述】:
我使用 S4 类编写了一个包,并希望将函数 rbind、cbind 与这些定义的类一起使用。
由于似乎无法将rbind 和cbind 直接定义为S4 方法,因此我改为定义rbind2 和cbind2:
setMethod("rbind2", signature(x="ClassA", y = "ANY"),
function(x, y) {
# Do stuff ...
})
setMethod("cbind2", signature(x="ClassA", y = "ANY"),
function(x, y) {
# Do stuff ...
})
从?cbind2了解到,这些功能需要使用methods:::bind_activation激活才能从base中替换rbind和cbind。
我使用 .onLoad 函数将调用包含在包文件 R/zzz.R 中:
.onLoad <- function(...) {
# Bind activation of cbind(2) and rbind(2) for S4 classes
methods:::bind_activation(TRUE)
}
这按预期工作。但是,运行 R CMD check 我现在收到以下注释,因为我在方法中使用了未导出的函数:
* checking dependencies in R code ... NOTE
Unexported object imported by a ':::' call: 'methods:::bind_activation'
See the note in ?`:::` about the use of this operator.
如何摆脱 NOTE 以及在包中为 S4 类定义方法 cbind 和 rbind 的正确方法是什么?
【问题讨论】:
-
您是否介意包括您尝试为其添加
rbind和cbind方法的几个S4 类的类定义(例如setClass("ClassA",...))?这样可以更轻松地为您的问题找到解决方案。 -
在这种情况下,类定义并不重要,因为它只是方法选择/调度的问题。所以你可以使用任何定义,比如 setClass("ClassA",representation(a = "numeric"))。
-
另外,您能否解释一下为什么“...似乎无法将 rbind 和 cbind 直接定义为 S4 方法...” - 也许添加您的试图实现这个的代码?
-
正如 Matrix 库中 cBind 的帮助页面中所述:基函数 cbind 和 rbind 是为任意数量的参数定义的,因此具有第一个形式参数 .... 因此,无法轻松定义 S4 方法来将继承自 Matrix 的矩阵绑定在一起。