我正在尝试为"["
我创建的自定义类重载下标运算符 ()。我试图弄清楚如何处理以下问题。
- 您如何确定操作员是在 lhs 还是 rhs 上?即
a[x] = foo
与foo = 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 点对我来说是最不重要的。