問題タブ [r-s3]
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 - ジェネリックメソッドを上書きしない方法
Rのs3クラスシステムについて頭を悩ませようとしています.
ドキュメントには、作成したいメソッドのジェネリック関数を作成する必要があると書かれています。
fooclassのメソッドを作成したいとしましょうXYZ。
R が持っているすべてのパッケージで、以前に作成されたジェネリック メソッドを上書きしていないことをどのように確認できますか?
要約は、おそらく誰もが既に存在することを知っているため、悪い例ですが、既にロードしたパッケージまたはこれからロードするパッケージで、ジェネリックがすでに定義されている可能性があります。
r - 引数がドット ('...') を介して渡された場合の部分一致の混乱
私は、グラフ データベースの REST API ラッパーにすぎない R パッケージに取り組んできました。クラスとcreateNodeオブジェクトを返す関数があります:nodeentity
createRelデータベース内の 2 つのノード間の関係を作成する別の関数 があります。次のように指定されます。
を使用...すると、ユーザーはキー = 値の形式で関係に任意の数のプロパティを追加できます。例えば、
これにより、db に (Alice)-[KNOWS]->(Bob) の関係が作成され、プロパティsinceとthroughそれぞれの値が作成されます。ただし、ユーザーがキーfromまたは引数toでプロパティを指定すると...、R は と のクラスについて混乱しfromNodeますtoNode。
key でプロパティを指定するとfrom、 のクラスについて混乱が生じfromNodeます。使用していcreateRel.defaultます:
同様に、ユーザーが keytoでプロパティを指定すると、 のクラスについて混乱が生じtoNode、 で停止しますstopifnot()。
パラメータを明示的に設定するとうまくいくことがわかりましたcreateRel:
createRelしかし、次の構文がエラーなしで機能するように、関数をどのように編集する必要があるのか 疑問に思っています。
この問題を開いた GitHub ユーザーは、とsetAsという引数を持つ on dispatch との競合である可能性が最も高いと述べました。解決策の 1 つは、削除して次のように変更することです。fromto...createRel
しかし、この変更を行う前に、他のオプションがあるかどうかを確認したかった.
r - Rパッケージ内でS3メソッドを再登録するにはどうすればよいですか?
R 用のツールに取り組んでいますが、パッケージ内の S3 メソッドを置き換える方法がわかりません。例を挙げてみましょうprint.aov。本体を置き換えたいのですが、stats名前空間内です。名前空間で関数を再割り当てするだけなら
新しいものではなく、以前に登録された関数がprintディスパッチ時に呼び出されます。
R.methodsS3パッケージも試しましたが、ロックされた環境で割り当てを実行しようとするため、機能しません。
S3 メソッドのディスパッチが発生したときに、新しい関数が確実に呼び出されるようにするにはどうすればよいですか?
r - R: グローバル環境でパッケージ 'base' から 'split' の汎用関数を作成しています
簡単にするために、次のサンプルコードを使用します:)
S4 class を定義してtestから、いつものようにclass のsetMethodジェネリック関数を書くことにしました:splittest
上記のコードを実行すると、R コマンド ラインから次のようなメッセージが表示されます。
グローバル環境でパッケージ「base」から「split」の汎用関数を作成する
そして、プログラムの出力は次のようになります。
出力は正しいようです。しかし、私の質問は、メッセージを抑制する方法です:
グローバル環境でパッケージ「base」から「split」の汎用関数を作成する
どうもありがとう :)
PS:split S4 クラス
のメソッドの定義を、次のようにS3 ジェネリック メソッドを実現する方法testの形式に置き換えると、そのメッセージが削除されることがわかりました。
ただし、 S3とS4を混在させるのは良い考えではないと思います :)
r - 演算子のオーバーロードが R パッケージで機能しなくなる
基本的にリストであるコンテナクラスがあります。サブセット化をサポートしたかったので、サブセット[演算子をオーバーロードしました (実装が不十分である可能性があります)。
これで、開発環境 (パッケージのデバッグ時) では期待どおりに動作します。つまり、y_oldがspectraオブジェクトであり、私が行う場合でも、 はy_new = y_old[-1]オブジェクトです。y_newspectra
ただし、プロジェクトをパッケージとしてコンパイルしてインストールすると、サブセット演算子はオブジェクトではlistなくa を返しspectraます。
何が起こっているかの手がかりはありますか?
編集
RStudio とdevtoolsライブラリを使用していることを忘れていました。
r - S3 ジェネリックの変数スコープ
次のスニペットがあります。
yにアクセスできる理由がわかりませんg.numeric <- function(x) y。私の理解では、 y のスコープはジェネリックの定義の範囲内(g <- ...)です。誰かが私に説明してもらえますか?