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