問題タブ [reference-class]
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 参照クラス
参照クラス コンストラクターに参照クラスを渡し、渡された参照クラスをフィールドとして割り当てたいと考えています。ただし、以下のコードを実行すると、エラーが発生する理由がわかりません。私の質問は次のとおりです。
1) このエラーが発生する理由を誰かが親切に説明してください:
2) class.a.containerをクラス "list" として宣言しましたが、これを参照クラスにしたいと考えています。「リスト」の代わりにここに何を入れる必要がありますか?
r - 参照クラスの R テスト
インスタンスが参照クラスからのものかどうかをテストする簡単で汚い方法はありますか?
標準の R オブジェクト テストでは次の結果が得られますが、参照クラスのみをマークしているようには見えません。
r - r 参照クラス - 静的フィールド メンバー/変数はありますか?
私は、R の R5 クラス システムで少し遊んで、何ができて何ができないかを確認してきました。そのプロセスで、静的クラス フィールド メンバーのように見えるものに出くわしました (これはドキュメントにはないようですが、見落としていた可能性があります)。
[2014年更新]
警告!!! : 次のコードは R バージョン >= 3.0 では機能しません。
この投稿、その回答、特にコメントは、R5 OO システムと R 言語全般に関する有用な洞察と注意事項を提供します。ただし、R5 クラスのインスタンスの環境を直接使用する慣用句を育てるのはおそらく悪い考えです。
【2014年末更新】
次のコードでは、最初のフィールドはインスタンス フィールド変数の従来の定義です。2 番目の定義は、アクセサー メソッドを使用して静的クラス フィールドを作成するように見えます。この使用法がコーシャかどうか (または私のコード例は単なる偶然かどうか) を知りたいです。3 番目のフィールドの使用では、アクセサー メソッドを使用して準プライベート インスタント フィールド変数を作成します。
このコードを実行すると、2 番目のフィールド変数が静的クラス メンバーとして動作しているように見えることがわかります。私にはあまり明確ではないのは、参照クラスがこのフィールドを保持する場所です (したがって、上記の最後から 2 番目の行に私のコメントがあります)。
r - S4 参照クラスのインスタンスのデフォルト フィールド値の定義
S4 Reference Classesインスタンスのフィールドのデフォルト値を定義するにはどうすればよいですか?
通常の S4 クラスの場合、次のprototype
引数があります。
のヘルプページを理解している限り、これは引数setRefClass
を介して S4 参照クラスでも機能するはずです。...
それぞれのセクションには次のように記載されています。
... setClass に渡されるその他の引数。
まだ正しくprototype
ディスパッチされていないようです:setClass
あるいは
のヘルプ ページで、デフォルト値/プロトタイプに関連するものは他に見つかりませんでしたsetRefClass
。
これはバグですか、それともここで明らかな何かが欠けていますか?
編集
デフォルト値を述べるのに役立つ最も近いものは です$initFields()
。
これは?setRefClass
言わなければならないことです:
指定された引数からオブジェクトのフィールドを初期化します。通常、このメソッドは $initialize() メソッドを持つクラスからのみ呼び出されます。これは、参照クラスのデフォルトの初期化に対応しています。スロットと非参照スーパークラスがある場合、これらも ... 引数で指定できます。
通常、特殊な $initialize() メソッドは独自の計算を実行し、次に $initFields() を呼び出して標準の初期化を実行します。これは、以下の例の matrixViewer クラスに示されています。
ここまでは順調ですね
「デフォルトの初期化ケース」の扱いとして機能します。
ただし、(一部の) フィールド値が初期化時に明示的に指定されている状況を処理できない場合:
回避策
本当に汚いですが、うまくいきます
初期化
それが私が探しているものですが、もっと「組み込み」のものがあると確信していますか?
編集2
全体がもう少し一般的です。メソッドensureDefaultValues
は、他の各クラスが継承するクラスのメソッドである可能性があります。「継承パスをさらに下る」クラスの場合、このメソッドはintialize
メソッド内で簡単に呼び出すことができます。
r - Rの参照クラス内にグローバル変数を設定する
スタックオーバーフローの質問をたくさん読んだ後、グローバル変数の割り当てについて少し混乱しています。私はRのグローバル変数と他の同様の質問を経験しました
私は次のような状況にあります。2つのグローバル変数current_idx
とprevious_idx
。これらの2つのグローバル変数は、参照クラスのメソッドによって設定されています。
基本的に、<<-
代入演算子の使用は正しく機能するはずですか?しかし、私はこの警告を受け取ります
どこが間違っているのですか?
編集
作品を使用assign(current_idx, index, envir = .GlobalEnv)
する、すなわち私は警告を受けません。誰かがこれに光を当てることができますか?
r - 他の 2 つの参照クラス オブジェクト間で参照クラス オブジェクトへの参照を渡す (サッカーの例)
次の例では、他の 2 つの参照クラス オブジェクト (たとえば、2 人のサッカー [フットボール] 選手) の間で参照クラス オブジェクト (たとえば、ボール) への参照を「受け渡し」ようとしています。
ただし、次のエラーが表示されます。
理論的には、ボール オブジェクトへの参照を返してから、その参照を他のプレイヤーに追加しようとしていますが、明らかに機能していません。フィールドに直接アクセスすることで同じ結果を達成できることはわかっていますが、クラスの内部メソッドのみを使用してこの「パス」を達成する方法を見つけたいと思います。これは可能ですか?このエラーが発生するのはなぜですか?
r - R setRefClass アクセサー
を作成しました。このクラスの新しいインスタンスを作成するときに、setRefClass
を使用してフィールドにアクセスできるように、アクセサを実装する方法を知りたいです。初期化メソッドで使用することを考えていましたが、うまくいかないようです。setXXX
getXXX
.self$accessors(names(.self$fields()))
r - 参照クラスでフィールド割り当てを確認する方法
参照クラスについて質問があります。フィールドの割り当てを確認するにはどうすればよいですか。
ここに私のサンプルコードがあります:
私の問題は、「test $ firstValue<-11」が値をチェックせずに設定されていることをどのように防ぐことができるかということです。S4では、次のように解決します。
最後に、「A」のクラス定義に「validity = function(object){ ... }
」が配置されます。しかし、参照クラスを使用してこれを解決するにはどうすればよいですか?
手伝ってくれてありがとう。
r - R での関数の演算子のオーバーロード - 奇妙な動作
残念ながら(f+g)(3)
、f と g が両方とも単項関数であるようなことは R では機能しません。したがって、次の方法で単項関数の「+」演算子をオーバーロードしようとしました。
しかし、これを使用しようとすると、これは何もしません。コード
+.function
が定義されていない場合と同じエラーが発生します。
しばらく遊んでみると、実際にはこの方法で関数を追加できる可能性があることがわかりました。関数が参照クラスのメンバー関数である場合、これは機能します! つまり、次のコード (上記の "+" 定義と一緒に)
"8" を返します (予想どおり)。したがって、私はすでに私の問題に対するある種の回避策を持っています。今私の質問は次のとおりです。
この奇妙な動作の理由は何ですか? +.function
「通常の」関数ではなく、クラスメンバー関数を気にするのはなぜですか? 演算子を通常の関数に「拡張」する方法を知っている人はいますか?
r - S4参照クラスのフィールド値を取得するときにフレームを囲むことを考慮しないようにする
私はS4リファレンスクラスの大ファンです。ハイブリッドプログラミングスタイル(機能/値渡しとoop /リファレンス渡し;例)が可能であり、柔軟性が劇的に向上します。
ただし、メソッドを介して特定のフィールド値を取得するように要求したときに、Rが環境/フレームをスキャンする方法に関して望ましくない動作に遭遇したと思います$field()
(ヘルプページを参照)。問題は、実際のローカル/ターゲット環境(S4参照クラスを構成する環境)で目的のフィールドが見つからない場合、つまり実行中のように、Rが環境/フレームを囲んでいるように見えることです(ヘルプをget(<objname>, inherits=TRUE)
参照)ページ)。
実際の質問
Rにローカル/ターゲット環境だけを見てもらうために、私は次のようなことを考えていましたが、私が渡すことを可能にする引数$field(name="<fieldname>", inherits=FALSE)
が$field()
ありません(これは途中で呼ばれていると思います)。これに対する回避策はありますか?...
inherits=FALSE
get()
コード例
詳細に興味のある方へ:動作を説明する小さなコード例を次に示します。
a
クラスにフィールドがあるA
ため、ターゲット環境で検出され、値が返されます。
参照クラスのフィールドではないが、ワークスペース/検索パス(この場合"lm"
)の他のオブジェクトの名前と同じ名前のフィールドにアクセスしようとすると、状況が異なります。
現時点で私が期待することではありません。私見エラーまたは少なくとも警告ははるかに良いでしょう。$field()
または、を介して他の関数に渡すことができる引数のメソッドを開き...
ます。get()
を呼び出すときに途中で呼び出されると推測している$field()
ので、次のようなものが上記の動作の発生を防ぐ可能性があります。
回避策:独自の提案
これでうまくいくはずですが、次のような新しいメソッドの指定を伴わない、よりエレガントなものがあるかもしれません$field()
。