我有一个data.frame
的子类,在子集化时需要额外的参数。 NextMethod()
传递额外的参数,这会生成错误,因为下一个方法既不识别参数本身,也不识别'dots'参数。
示例:
class(Theoph) <- c('special','data.frame')
`[.special` <- function(x, i, j, drop, k, ...){
y <- NextMethod()
attr(y, 'k') <- k
y
}
Theoph[1:5,k='head']
结果:
Error in `[.data.frame`(Theoph, 1:5, k = "head") :
unused argument (k = k)
我可以让'k'在下游看不见吗?我已经尝试删除它,定义为NULL,只传递感兴趣的参数,编写一个包装器。由于一些非默认的参数匹配规则,子集运算符[
是一个特别困难的泛型。
答案 0 :(得分:2)
因为在这种情况下你知道下一个方法是什么,为什么不直接调用呢?
class(Theoph) <- c('special','data.frame')
`[.special` <- function(x, i, j, drop = TRUE, k, ...) {
y <- `[.data.frame`(x, i, j, drop = drop)
attr(y, 'k') <- k
y
}
Theoph[1:5, k = 'head']
但是,我会对这种方法持谨慎态度,因为[
是一个相当特殊的函数,我认为它实际上并没有在其参数列表中包含...
。 (它看起来像在文档中,但我认为这是一个简化,它不使用标准的...
对象)