問題タブ [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 - Roxygen2 - 参照クラスを文書化するときの「引数の長さはゼロです」エラー
最小限のケースを示すために、次のパッケージがあるとします。
私がroxygenize
(RStudioで、「Build & Reload」の前に)。私は得る:
何がうまくいかないのですか?このエラーを解決するにはどうすればよいですか?
私のセットアップ:
- Roxygen2 3.1.0
- roxygen を使用して生成します (RStudio で):
- Rd ファイル
- 照合フィールド
- 名前空間ファイル
- 実行時に自動的に roxygenising (RStudio で):
- R CMD チェック
- ソースおよびバイナリ パッケージのビルド
- ビルド&リロード
- roxygen を使用して生成します (RStudio で):
- R: 3.0.2 (フリスビーセーリング)
- IDE: RStudio 0.98.490
- OS: Windows 8.1
r - R パッケージ - `methods` パッケージをインポートする必要がありますか?
setRefClass
クラスの作成に使用していますが、methods
パッケージの一部であるため、この依存関係をimport
.
ただし、次の最小限の例は、 ingのRcmd.exe check
ときに失敗します。import
methods
次のエラーが表示されます (私のパッケージは と呼ばれますTest
):
したがって、私が理解できることから、import
forを削除しmethods
て、パッケージの への依存関係を隠しておくように言われているようですmethods
。私の解釈は正しいですか?もしそうなら、なぜ依存関係を隠すのmethods
ですか?
私のセットアップ:
- Roxygen2 3.0.0
- R: 3.0.2 (フリスビーセーリング)
- IDE: RStudio 0.98.490
- OS: Windows 8.1
r - R 参照クラスでのフィールド アクセスの高速化
私はR 参照クラスを使用してコードを書いています。しかし、私が進歩するにつれて、プログラムは耐えられないほど遅くなりました。問題を示すために、次の例を取り上げます。
それはとります:
- メソッド呼び出しの場合は 4 秒
- 乱数を生成する呼び出しの場合は 7
- フィールド値をインクリメントするための 19 秒
問題を引き起こしているのは最後の結果です。明らかに、乱数を生成するよりも数値をインクリメントするのに 2 倍の時間がかかるとは思いません。私のコードには、参照クラスのフィールド値へのアクセスと変更が多数含まれており、このパフォーマンスの問題により、プログラムはほとんど使用可能になりました。
私の質問: R 参照クラスでのフィールド ルックアップ/アクセスのパフォーマンスを向上させるためにできることはありますか? 私が別のことをしなければならないことはありますか?
r - 明示的に定義されたメソッドのみを一覧表示する (参照クラス)
クラス定義で明示的に定義された参照クラスのメソッドのみをリストする方法はありますかrefObjectGenerator
( またはなどの「システム クラス」によって継承されるメソッドとは対照的envRefClass
です)。
メソッドを呼び出して現在取得している$methods()
もの (「 」を参照?setRefClass
):
私が探しているもの:
r - 元のエラー メッセージの拡張
自分で書いていない関数の呼び出しが失敗したときにスローされる元のエラーメッセージを直接拡張/拡張/上書きする方法はありますか (つまり、ベース Rおよび提供されたパッケージの関数)?
例
次の参照クラスを検討してください。
正しい値を指定してもエラーなし:
間違った値を指定すると発生するエラー:
ここで、実際に「問題を引き起こした」クラスに関する情報を含めたいと思います。
たぶん、これは次のようになります。
近いものを実現するための現在の回避策は、次のようになります。
最初に「空の」オブジェクトをインスタンス化した後
これにより、明示的な設定メソッドを介してフィールドに間違った値を設定しようとすると、次のエラーが発生します。
以下の理由で嫌いです。
ほんの少しの追加情報のための大量のコードであり、その
tryCatch()
部分によりコードがやや読みにくくなっています。tryCatch()
、AFAIUの性質上、「通常の」動作が予想される場合(つまり、「警告があったにもかかわらず、フィールド値がまだ設定されている」) 、.self$field(field=field, value=value)
ステートメントを関数内に配置する必要があります。warning()
それは重複したコードです。as.character()
(AFAIUなどを介して情報を追加できるようにするために必要な)を介してエラーメッセージを強制すると、エラーメッセージが途切れることがpaste()
あるようです。<obj>$setField(<field>, <value>)
そうすれば、「組み込み」initialize
関数 (new("A", <field>=<value>)
)を介してフィールド値を設定するのではなく、明示的なセッター関数 ( ) を介してフィールド値を設定する必要があります。
r - ReferenceClass の `print` メソッド
私は持っている:
MyClass <- setRefClass("MyClass" , fields = list(data="numeric"))
のオブジェクトを初期化しましょうMyClass
:
OBJ <- MyClass(データ=1:4)
...そして画面に印刷します:
オブジェクト
印刷方法を変更したいので、この方法を書きました:
print.MyClass <- function(x) { cat("これは印刷表現です: ") print(x$data) }
これで動作します:
印刷(OBJ)
これはしません:
オブジェクト
入力するだけで印刷メソッドを実装する方法はありますOBJ
か?
show
、またはも試し(OBJ)
ましたが、私への愛はありません。