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

标签 r oop subset argument-passing

我有一个 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/

相关文章:

r - GLM 逻辑回归的有效起始值错误

java - 有没有办法从对象和类名初始化变量?(例如通过使用反射)

javascript - 使用原型(prototype)时如何引用父对象?

prolog:长度为 k 的子集

c - 将指向 C 结构的指针存储为整数

r - "Selective"加入 data.frame 中?

r - 如何全选

r - 按子段对数据帧进行排序

使用 RSelenium 读取下拉菜单元素中的值

php - Wordpress oop wpdb 在类里面