我正在实现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中做同样的事情?
谢谢!
答案 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
相同的方式传递。