2016-05-26 8 views
2

S3クラスのサブセット演算子の代わりを実装しています。私は特別な問題が生じていますしかし、私はS3クラスのサブセット演算子 - [i]と[i、]の検出方法

How to define the subset operators for a S4 class?

上の助言に従いました。誰かがx [i]やx [i、]を書いたかどうかをRコードでどのように区別するのですか?どちらの場合も、変数jが失われるだけです。

setOldClass("myclass") 

'[.myclass' <- function(x, i, j, ..., drop=TRUE) { 
    print(missing(j)) 
    return(invisible(NULL)) 
} 

そして私が得る結果:

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

私は2つを区別する方法についての方法は表示されません。私は、内部のCコードは引数のペアリストの長さを見てそれを行うと仮定しますが、ネイティブRで同じことを行う方法はありますか?

ありがとうございます! alexis_lazさんのコメントから

+1

おそらく[".data.frame" 'が引数を扱い、' nargs() 'がどのように扱われるのかを見てください。 –

答えて

0

参照は、おそらく、[.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と同じ方法で渡された引数を見つけ出す手助けするために十分でなければなりません。

関連する問題