2013-04-08 9 views
5

2次元行列を1行に縮小するRのデフォルトの動作は、実際には次元を削除することです。これは、マトリックス検索の終わりにdrop = FALSEを置くことによって "固定"することができます。 これをデフォルトにする方法はありますか?私はかなり長いプログラムを持っていて、もし存在しなければ約100の場所にこれを加えなければならないことに気がついた。 私は何のオプションも探した? '['、 '?matrix to no avail。drop = FALSEまたはデフォルトの動作を変更する代わりに

+0

置換を行うために、Perlまたはシェルスクリプトをコードに書きます。 OK、それを定義するのは簡単ではないかもしれませんが、ショットの価値があります。 – igelkott

+2

私は、ハッキング([等]を乗り越え)があると信じていますが、一般的には、その行動をグローバルに変更する方法はないと思います。最良の選択肢は、あなたのコードを更新することです。 – joran

+0

これまでに質問された質問をリンクしてくれた人のおかげで、それは完璧です。 – hedgedandlevered

答えて

5

あなたはこのよう`[`を再定義することができます:

old <- `[` 
`[` <- function(...) { old(..., drop=FALSE) } 

この変更は、対話型のスコープに対してローカルであるので、他の動作に依存しているルーチンに影響を与えるべきではありません。しかし、保証はありません。そして、このフォームのコードは、他のセマンティクスに慣れているあなたのコードの読者を混乱させる可能性があることに気をつけてください。

おそらく、すべてのコードではなく、特定の関数に対してローカルで変更を加えることができますか?

代わりに、独自のサブセット演算子の実装を提供できるマトリックスオブジェクト用の独自のクラスを作成することもできます。非常に限られた数の場所に行列を構築すると意味がありますが、これらの行列を構成するコード・パスが多数ある場合は問題になる可能性があります。

関連する問題