我正在尝试为我创建的自定义类重载下标运算符("[")。我试图弄清楚如何处理以下问题。

  • 如何确定运算符(operator)是在lhs还是rhs上?即a[x] = foofoo = a[x]
  • 当像foo = a[,x]这样的整个维度下标时,如何确定第一个参数?
  • 当使用a [seq(x,y)]时,似乎正在扩展整个序列。是否有一种简单的方法可以获取第一个,第二个和最后一个值而无需扩展?

  • 编辑:我的第一点已收到多个答案。在这个过程中,我已经找到了第二个答案。您可以使用“缺少”功能来找出存在哪些参数。

    这是一个示例代码:
    setMethod("[", signature(x="myClass"),
              function(x, i, j, k, l) {
                  if (missing(i)) { i = 0 }
                  if (missing(j)) { j = 0 }
                  if (missing(k)) { k = 0 }
                  if (missing(l)) { l = 0 }
              })
    

    我已经接受了这个问题的答案,因为对我来说,第3点是最不重要的。

    最佳答案

    对于第一个要点,有两个函数可以重载:

  • [
  • [<-

  • 第一个函数返回值,第二个函数设置值。请参阅Extract.data.frame{base}的文档

    关于r - 重载下标运算符 "[",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22407942/

    10-16 04:40