16

いくつかの背景:

HMRパッケージの関数を多用する必要がありますHMR。残念ながら、この機能は非常に遅いです。(HMR本質的にはフィッティング関数であり、可能な限り堅牢になるように設計されています。これが効率性の欠如の理由の1つです。)関数は、実際のフィッティングを行う関数をHMR呼び出します。HMR::.HMR.fit1使用Rprof効率に関する主な問題は、の使用であることがわかっていますlsfit。これはよく呼ばれます。したがって、のコードを変更して、のオーバーヘッドなしで直接.HMR.fit1使用されるC関数を呼び出すようにしました。これにより、大幅な速度の向上が得られるはずです。lsfitlsfit

ここで、変更した関数に置き換えて、同じ結果が得られるかどうか、およびどれだけの速度が得られるかをHMR::.HMR.fit1テストしたいと思います。HMR

私はこれをやろうとしました:

mod.fun <- function(<many args>) {
 <a lot of code>
}
environment(mod.fun) <- environment(.HMR.fit1)
.HMR.fit1 <- mod.fun 

ただし、HMR::.HMR.fit1これを行っても変更されずHMR::HMR、変更されたフィッティング関数を使用していないようです。ソースからパッケージをビルドせずに目的を達成する方法はありますか?これは、(Windows)コンピューターのユーザー権限の制限のために実行できませんか?

今のところ、私の解決策はのコードをコピーするHMR::HMRことですが、もっと便利な解決策があることを願っています。

4

2 に答える 2

18

試す

?assignInNamespace

パッケージ.HMR.fit1内をお使いのバージョンに置き換えます。HMR

の重複の可能性:

パッケージの名前空間で非表示の関数をオーバーライドするにはどうすればよいですか?

于 2012-08-29T13:26:42.477 に答える
8

簡単なテストのために、関数を使用してtrace関数を変更できます。これにより、適切な名前空間で置換が行われ、関数を元に戻すedit=TRUEために使用することもできます。untraceこれらの変更は、現在のセッションを超えて持続することはありません。

于 2012-08-29T14:41:10.697 に答える