我可以阻止参数通过R中的NextMethod传递吗?

时间:2014-02-18 16:32:00

标签: r oop subset argument-passing

我有一个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,只传递感兴趣的参数,编写一个包装器。由于一些非默认的参数匹配规则,子集运算符[是一个特别困难的泛型。

1 个答案:

答案 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']

但是,我会对这种方法持谨慎态度,因为[是一个相当特殊的函数,我认为它实际上并没有在其参数列表中包含...。 (它看起来像在文档中,但我认为这是一个简化,它不使用标准的...对象)