関数namesを取り上げます。これは R のプリミティブ関数です。プリミティブ関数の場合、暗黙的な S4 ジェネリックが作成されるため、その関数の S4 メソッドを構築できます。
次のように定義された S4 クラスを使用します。
setClass("aClass",
         representation=list(
           values = "character",
           id = "numeric"
           ),
         prototype=list(
           values = character(0),
           id = numeric(0)),
         validity=function(object){
           length(object@values)==length(object@id)
         }
        )
ここで、ソート済みまたは未ソートの名前を抽出する関数を作成したいと考えています。names関数を使用してこれを行い、新しい関数などを作成する必要がないようにしたかったのです。これはgetNames()直感的ではないためです。
以下は、何をする必要があるかのアイデアを示しています。
setMethod("names",signature="aClass",
   function(x,ordered=TRUE){
      if(ordered)
        x@values[x@id]
      else
        x@values
   }
namesプリミティブ関数でありordered、暗黙のジェネリックの引数ではないため、これは機能しません。
次の条件下でこれを機能させるにはどうすればよいですか。
- 関数は、names他のパッケージのオブジェクトを含む、他のすべてのオブジェクトに対して元の動作を維持する必要があります。
- コードはパッケージで使用できるものでなければなりません
- コードは、Bioconductor などによって設定された高い基準によって受け入れられる必要があります。