names
:それはRのプリミティブ関数です。プリミティブ関数の場合、暗黙のS4ジェネリックが作成されるので、その関数のS4メソッドを構築することができます。次のようにプリミティブ関数の暗黙のS4ジェネリックに余分な引数を追加
は、定義されたS4クラスを取る:
setClass("aClass",
representation=list(
values = "character",
id = "numeric"
),
prototype=list(
values = character(0),
id = numeric(0)),
validity=function(object){
length([email protected])==length([email protected])
}
)
を今私は、ソートまたはソートされていないのいずれか、名前を抽出するための関数を作成します。私はこれを、names
という関数を使って新しい機能(getNames()
など)を作る必要がないようにしたいと思いました。それはそれほど直感的ではありません。
以下が何をすべきかのアイデアを与える:
setMethod("names",signature="aClass",
function(x,ordered=TRUE){
if(ordered)
[email protected][[email protected]]
else
[email protected]
}
names
は原始関数であり、ordered
が暗黙のジェネリックの引数ではありませんので、これは、動作しません。
はどのようにして、以下の条件の下で、この作業を行うことができます。
names
機能は他のパッケージからオブジェクトを含め、他のすべてのオブジェクトのために元の動作を維持する必要があります。- コードはパッケージ内で使用するために許容されるべきである。
- コードはBioconductorなどで設定された高い基準で許容されるべきである。
答えてくれてありがとうございますが、それは私の質問で言ったことです:私は余分な引数を使用することはできません。数値インデックスは、順序付けられた名前と他のスロットのセット(実際のオブジェクトははるかに複雑であり、すべてのスロットを順序付けることはできません)です。私は、オブジェクトが注文されたかどうかを示す余分なスロットを使用します。私は、順序付けられた名前を「並べ替える」ために長い道のりを歩んでいます。しかし、私はハッキングせずにこれを行う方法を見つけることを望んだ。パッケージグローバル変数は、有効なオプションを考慮しなくてもよい種類のハックです。 :) –
あなたの質問からはい、あなたは答えがノーだと思ったようでしたが、あなたが質問したので、私は答えました;) –
私は周りに何か方法があることを期待していましたが、 "いいえ"と解決しなければなりません:)私はそれにもう少しの日を与えます。そしてあなたはあなたの受け入れられた答えを持っています。 –