問題タブ [s4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - ネストされた関数での複雑なオブジェクト初期化スコープの問題
わかりました。S4 クラスを使用して非常に複雑なオブジェクトを構築しようとしています。スロットには、半ダースのマトリックス、いくつかのリスト、およびおそらくキッチン シンクが 1 つまたは 2 つ含まれています。オブジェクトは、定義済みの構成オブジェクトを参照して展開することで初期化されます。setClass() でクラスを定義するのは簡単ですが、setMethod("initialize") でスロットを設定する洗練された方法を見つけるのに苦労しています。
問題は、その構成オブジェクトの一部に基づいて、これらの半ダースの行列の特定の要素を設定する必要があることです。構成オブジェクトの各要素に対して、いくつかのマトリックスの特定の要素を設定する必要がある場合があります。行列は初期化関数のスコープ/環境にあることに注意してください。次に、行列への実際の割り当てを行う初期化関数内にネストされた関数があります。とにかくそれがアイデアです。これらの関数はもちろん行列を見ることができますが、変更することはできません元の変数が現在の環境で定義されていない場合、<- 演算子によって新しい行列が作成されるためです。R は値渡しであり、それを意味します。これは、初期化しようとしている .Object のスロットにも当てはまります。したがって、ネストされた関数を使用して初期化を行うことはできません。
残念ながら、これらのネストされた関数はいくつかの行列を変更する必要があるため、メインの初期化関数で値を返したり代入を行ったりすることは実用的でもエレガントでもありません。(ただし、行列のコピーを返されたリストに詰め込んでから、それらをメインの初期化関数に結合した場合は可能です。ただし、醜いので、多くの追加コードが必要になります。)
また、構成オブジェクトの階層的な性質のため、再帰呼び出しでトラバースする必要があるため、反復 (このスコーピングの問題を防ぐ) もあまり実用的ではありません。
私が考えることができる最後のオプションは、割り当てを強制的に非ローカル変数に適用するために、envir オプションを指定して assign() 関数を使用することです。しかし、goto ステートメントのように、そのような環境を使用するのは面倒に思えます...
では、最も海賊的なアプローチは何ですか? 冗長な行列を非効率的に渡すためだけに、純粋な関数型プログラミングに固執し、醜いデータ構造を構築しますか? 関数を完全に回避する反復的な解決策を見つけてみませんか? 環境をいじって深い魔法を使う?
r - ROCR パッケージからデータをエクスポートする方法
ROCR パッケージを使用して分析から生体認証データをエクスポートしようとしています。これまでに行ったコードは次のとおりです。
これにより、いくつかのスロットが発生します。次を使用して、結果の値をExcelの変更用のテキストファイルにエクスポートしたいと思います。
write(pred, "filename")
ただし、ファイルを書き込もうとすると、次のエラーが表示されます。
これを回避する方法はありますか?
アドバイスをいただければ幸いです。ありがとうございました!
マット・ピーターソン
r - Rコードの例/ベストプラクティス
私はRに不慣れで、Rコードを書く際の「良い」習慣と見なされるものに関連するオンラインのさまざまなソースからの情報をつなぎ合わせるのに苦労しています。基本的なガイドを読みましたが、間違いなく最新の情報を見つけるのに苦労しています。
- よく書かれた/文書化されたS3クラスの例は何ですか?
- 対応するS4クラスはどうですか?
- .Rクラス/関数にコメントするときにどのような規則を使用しますか?すべてのコメントを.Rdファイルと.Rファイルの両方に入れますか?これらのファイルの同期は面倒ですか?
r - Rで@記号はどういう意味ですか?
marrayやlimmaのようなパッケージでは、複雑なオブジェクトがロードされると、@記号を使用してアクセスされる「メンバー変数」が含まれます。これはどういう意味で、$記号とどう違うのですか?
r - S4メソッドを検査します
S4関数の定義を表示するにはどうすればよいですか?たとえば、パッケージTSdbiでTSconnectの定義を確認したいと思います。コマンド
とりわけ、drv = "histQuoteDriver"、dbname="character"の関数があることを示しています。
この関数の定義をどのように確認できますか?S3関数の場合、定義可能な最初の引数(drv)のみが存在し、print(TSconnect.histQuoteDriver)で検査できます。
編集:r-forgeから目的の出力を見つけました:
Rセッション内からこの定義を取得する方法はありますか?
r - Rでは、別のオブジェクトのクラスに基づいてS4クラスを設定するにはどうすればよいですか
Bioconductor の ShortRead ライブラリから ShortReadQ タイプのオブジェクトを作成する必要があります。
品質スロットは、エミュレートしたい別の ShortReadQ オブジェクトから簡単に判断できる QualityScore から継承するオブジェクトである必要があります。
コンストラクター引数でその情報 (「SFastqQuality」) を使用する最良の方法は何ですか?
r - RパッケージでS4メソッドにパッチを当てる方法は?
パッケージにバグが見つかった場合、通常はfixInNamespace
、たとえばで問題にパッチを当てることができfixInNamespace("mean.default", "base")
ます。
S4メソッドの場合、どうすればよいかわかりません。私が見ている方法はgWidgetstcltk
パッケージにあります。でソースコードを見ることができます
でメソッドが見つかりませんfixInNamespace
。
setMethod
私はそのトリックを行うかもしれないと思ったが、
何か案は?
r - R では、オブジェクトのスロット内の値を直接調整する S4 オブジェクトのメソッドをどのように作成できますか?
オブジェクト全体をメモリにコピーしたり、メソッドの最後に親環境に再書き込みしたりすることなく、S4 オブジェクトのメソッドがそのオブジェクトのスロット内の値を直接調整できるようにする方法はありますか? 現在、独自の状態を追跡するスロットを持つオブジェクトがあります。次の状態に進めるメソッドを呼び出しますが、今のところ、各値 (またはメソッドを呼び出すオブジェクトのコピー) を親環境に assign() する必要があるようです。その結果、オブジェクト指向コードは、ループ内のさまざまな状態変数を単純に調整するコードよりも実行速度が大幅に遅くなるようです。
r - S4 オブジェクトの出力
人はどのようにdput()
S4 に反対しますか? 私はこれを試しました
dput()
S4 オブジェクトの場合、再構築できないことに注意してください。あなたの考え?
oop - RプログラミングでS4メソッドを使用することで利益が得られるのはいつですか
私はプロのコンテキストでRで定期的にプログラムを作成し、クライアントや同僚向けのパッケージも作成しています。ここにいるプログラマーの中には、Javaのバックグラウンドを持っており、S4メソッドを使用してすべてをオブジェクト指向の方法で実行することを主張している人もいます。一方、私の経験では、S4の実装はパフォーマンスが低下することが多く、コードに希望どおりの動作をさせようとすると、より多くの頭痛の種が発生します。
場合によっては、複雑なオブジェクトを作成したり、既存のオブジェクトを制御された方法で追加したりできる必要があることに間違いなく同意します。しかし、ほとんどの場合、S4の実装は、standardGeneric、メソッド、コンストラクター、初期化子などを定義するなどの面倒な作業なしで、クラシックリストを使用して簡単に実行できます。
RのS4実装を作成することをいつ検討しますか?
編集:明確にするために、Rでのオブジェクト指向一般に関する回答と議論に感謝します。OOPはRでさまざまな方法で実行できますが、私の質問は、特にS4メソッドを使用することの付加価値を目的としています。