問題タブ [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関数をオーバーライドするには?
バグのため、デフォルトの predict.lm 関数をオーバーライドしたい:
このエラーが発生します:
私はバグがどこにあるかを知っており、コアメーリングリストによる承認を待つ電子メールを送信しましたが、それまでの間、これを修正するために独自の predict.lm 関数をテストしたいと思います。予測のために S3 関数を再定義する必要があることは理解しましたが、このコードを実行すると:
getMethod は期待どおりに新しい関数を返しますが、termplot はまだ古い関数を実行します。またmethods("predict")
、古い predict.lm がまだ残っていることも示されています。これは、呼び出し順序または調整が必要なものである可能性があります。これを行う方法に精通している人はいますか?
r - S3メソッドを使用して引数をRのデータフレームにバンドルする
適度に多くのパラメーター(すべて同じ長さのベクトル)を持つ関数を作成しましたが、パラメーターをデータフレームにまとめることができれば楽になると思いました。私はS3メソッドを使用してこれを達成することができましたが、S3メソッドについてもう少し読んで、関数をコーディングした方法がS3規則の乱用であるかどうか疑問に思い始めています。
私がしたことが悪い考えかどうか知りたいのですが。もしそうなら、別のアプローチを歓迎します。
これが私がしたことの簡単な例です:
次に、mydata
列名が、、、Money
のtime
データフレームがある場合、このような呼び出しを行うと、関連するデータがに渡されます。それはすべてうまくいきますが、それは賢明ですか?AGE
weight
name
myfunc(mydata)
myfunc.default
r - 「+」メソッドにS3を使用して複数のディスパッチをエミュレートする-可能ですか?
2つのクラス(a
と)があり、それらのメソッドb
を定義したいと思います。+
2つのクラスの4つの可能な組み合わせに対して、異なるメソッドが必要です。
S4を多重ディスパッチに使用できることは知っていますが、S3を使用してこの動作をエミュレートする方法があるかどうかを知りたいです。私のアプローチは次のとおりです。
これはすべて正常に機能しますが、もちろん次のことは定義されていません。
この場合をカバーするために、別のメソッド定義を追加しました。
これによりb + b
動作しますが、現在a + b
、b + a
メソッドに一貫性がなく、エラーが発生します。
S3を使用して4つのケースすべてを適切に定義する方法はありますか?
r - ベクトルをメソッドに渡し、ベクトルS3メソッドを実装すると、デフォルトのS3メソッドが呼び出されるのはなぜですか?
私はRで以下を定義しました:
次の例をテストすると、次のようになります。
「デフォルトのメソッドは何もしません」と表示され、S3フレームワークがベクターメソッドではなくデフォルトのメソッドと一致することを示します。それはなぜですか?
r - ベース R で S3 メソッドをオーバーライドする
教えるときに使用するローカル パッケージ内の R stats パッケージの print.anova() 関数をオーバーライドしようとしています。基本的に、新しいクラスで新しい関数 (ANOVA() など) を作成せずに、見出しの印刷を削除し、「合計」行を追加したいと考えています。
関数は次のようになります。
私の問題は、これを関数、メソッド、S3 メソッド、それらの組み合わせ、またはまったく別のものとしてエクスポートするかどうかわからないことです。たとえば、これを試すと(roxygenizeコードの一部):
Rcmd チェックを実行すると、次の警告が表示されます。
しかし、パッケージをロードすると、関数は期待どおりに機能します。
ただし、これを試してみると:
Rcmd チェックでは警告やエラーは発生しませんが、R で関数を使用しようとすると、統計パッケージの名前空間で元の関数が見つかります。さらに、こうすると
私はこれを取得します
最後に、このバージョン (export を使用せず、メソッドと S3method を使用) では、roxygen で開発した名前空間に次の項目があります。
私の混乱を招くのは、他の関数で同様のことを行うことに成功したように見えることです (たとえば、print.summary.lm でメソッドと S3 メソッド バージョンを使用する)。
ここで何が間違っているか (または、最終的にこの目標を達成する方法) を理解するのに助けていただければ幸いです。よろしくお願いします。
ps、価値のあるものとして、私は Windows 7 (32 ビット)、R 2.15.2、および RStudio を使用しています。
r - Roxygen で R パッケージをビルドするときの S3 メソッドの一貫性の警告
S3 クラスを使用する関数用の roxygen ファイルを作成しました。私はroxygenizeしてからビルドしてチェックし、警告を受け取ります:
だから私は勉強に時間を費やしました:
http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methods & https://github.com/hadley/devtools/wiki/S3
しかし、以下のファイルで何が間違っていたのかわかりません。機能は期待どおりに機能します。
1) 警告が発生するのはなぜですか? 2) どうすれば消えますか?
r - S3メソッドヘルプ(roxygen2)
パッケージでS3メソッドを使用しようとしていますが、ここで質問した後、セットアップ方法を理解したと思いました。Roxygenを使用してRパッケージをビルドするときのS3メソッドの整合性の警告
しかし、今では予期しない結果が得られます。以下のコードをRで直接実行すると、期待どおりの結果が得られますが、パッケージにコンパイルすると、正しい結果が得られません(から一意の単語のみを取得する必要がある場合に、単語が2回カウントされることに注意してくださいvector a
)。何を間違って設定しているかわかりません。
.Rファイル:
コマンドラインからコードを実行する(予想される動作):
パッケージコンパイル後の出力:
r - 論理演算後にとどまるinteger64のサブクラス(R)
integer64オブジェクトをbit64からサブクラス化してから等価性テストを実行すると、結果には論理データが含まれますが、論理的ではなく、クラスでクラス化されます。これは、たとえば整数では発生しません。
サンプルコード:
戻り値
まだクラス「Foo」があることに注意してください
一方、整数で同じことを行う場合:
論理を返します
なぜこれが起こっているのか考えていますか?
r - S3 クラスのデフォルト要素
デフォルトの出力要素を定義し、残りの要素を非表示にするオプションがあるかどうか、R の S3 クラスについて疑問に思いました。例として、次のように、特定のものを計算して S3 クラスとして報告するおもちゃの関数があるとします。
今すぐ結果にアクセスすると
予想どおり、リスト全体を出力として取得します。しかし、S3 印刷メソッドも定義すると
resB
不要な情報 (この場合はとx
) を隠し、ユーザーには のみが表示される print の標準出力を提供できますresA
。toy
ただし、 classのオブジェクトにさらに計算を適用する場合、これは混乱を招く可能性があります。
私の質問は、呼び出しが同様に機能するresA
ように、変数が指定されていない場合に取られるべき S3 クラスの標準値になるようにリスト項目を定義する方法はありますか?res + 1
これを読んでくれてありがとう。