S3类的子集运算符 - 如何检测[i]与[i,]

时间:2016-05-26 10:13:03

标签: r subset

我正在实现S3类中子集运算符的替换。我按照

的建议

How to define the subset operators for a S4 class?

但是我遇到了一个特殊问题。如果有人写了x [i]或x [i,],我如何在R代码中区分。在这两种情况下,变量j都会丢失。

x <- structure(list(), class="myclass")
> x[i]
[1] TRUE
> x[i,]
[1] TRUE
> x[i,j]
[1] FALSE

结果我得到了:

{{1}}

我没有看到如何区分这两者的方法。我假设内部C代码是通过查看参数pairlist的长度来实现的,但有没有办法在原生R中做同样的事情?

谢谢!

1 个答案:

答案 0 :(得分:0)

来自alexis_laz的评论:

  

或许,请参阅[.data.frame如何处理参数和nargs()

在函数调用nargs()内部,查看提供了多少个参数,包括缺少的参数。

> myfunc = function(i, j, ...) {
+   nargs()
+ }
> 
> myfunc()
[1] 0
> myfunc(, )
[1] 2
> myfunc(, , )
[1] 3
> myfunc(1)
[1] 1
> myfunc(1, )
[1] 2
> myfunc(, 1)
[1] 2
> myfunc(1, 1)
[1] 2

这应该足以帮助您确定哪些参数以与[.data.frame相同的方式传递。