我有一个 data.frame
的子类,在子集化时需要一个额外的参数。 NextMethod()
传递额外的参数,这会生成错误,因为 next 方法既不识别参数本身,也不识别“点”参数。
示例:
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,仅传递感兴趣的参数,编写包装器。由于一些非默认参数匹配规则,子集运算符 [
是一个特别困难的泛型。
最佳答案
既然在这种情况下你知道下一个方法是什么,为什么不直接调用它呢?
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']
但是,我会对这种方法持谨慎态度,因为 [
是一个相当特殊的函数,而且我认为它实际上并不包含 ...
参数列表。 (看起来就像文档中的那样,但我认为这是一种简化,并且它没有使用标准 ...
对象)
关于r - 我可以阻止通过 R 中的 NextMethod 传递参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859777/