在S4类中使用3维重载[(子集)函数

时间:2015-03-20 02:02:26

标签: r s4

我有一个S4类(让我们称之为myclass),我想重置子集操作。类中的对象可以是3维或更多维,并且我希望提取运算符[的工作方式与数组的工作方式相同。具体来说,我希望能够使用缺失的索引,例如在对R阵列进行子集化时(例如,对于3D阵列,myarray[2, ,1:3])。

对于2D对象,这不是问题。要启用,例如object[, 1:3],我只需使用setMethod,如下所示:

setMethod(f = "[", signature(x = "myclass", i = "missing", j = "numeric"),
  definition = function(x, i, j, k = NA, l = NA, ..., drop) {
  i <- 1:(dim(x)[1])
  return(myfun(x, i, j, k, l, ..., drop))  
})

因为[函数只有两个命名的必需参数(ij),所以我无法找到将其扩展为3D或4D对象的方法。

我想创建一个通用的[函数,但R不允许我使用[运算符创建一个通用符:setGeneric('[', signature=c('i', 'j', 'k'))错误‘[’ is a primitive function; methods can be defined, but the generic function is implicit, and cannot be changed.

John Chambers&#39;关于S4课程的article,他似乎暗示Matrix套件会这样做,但我无法告诉他们是如何做到这一点的,并且查看Matrix源代码并没有向我展示任何明显的例子。

0 个答案:

没有答案