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

R S3类的子集运算符-如何检测[i]与[i,],r,subset,R,Subset,我正在S3类中实现子集操作符的替换。我听从了他的建议 然而,我有一个特殊的问题。如果有人写了x[I]或x[I,],我如何在R代码中区分。在这两种情况下,变量j都会丢失 setOldClass("myclass") '[.myclass' <- function(x, i, j, ..., drop=TRUE) { print(missing(j)) return(invisible(NULL)) } setOldClass(“myclass”) “[.myclass”

我正在S3类中实现子集操作符的替换。我听从了他的建议

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

setOldClass("myclass")

'[.myclass' <- function(x, i, j, ..., drop=TRUE) {
    print(missing(j))
    return(invisible(NULL))
}
setOldClass(“myclass”)
“[.myclass”x[i,]
[1] 真的
>x[i,j]
[1] 假的
我看不到如何区分这两者的方法。我假设内部C代码通过查看参数pairlist的长度来做到这一点,但是在原生R中有没有同样的方法


谢谢!

来自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

相同的方式传递的,请参见
“[.data.frame”
如何处理参数和
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