2012-08-29 38 views
13

いくつかの背景:変更内部機能

私はパッケージHMRから多くのことを機能HMRを使用する必要があります。残念ながら、この機能は非常に遅いです。 (HMRは本質的にフィッティング関数であり、できるだけ頑強に設計されているため、効率の欠如の原因の1つです)。関数HMRは関数HMR::.HMR.fit1を呼び出し、実際のフィッティングを行います。 Rprofを使用効率についての主な問題はlsfitの使用であることがわかっています。したがって.HMR.fit1のコードをlsfitによって使用されるC関数を直接呼び出すように変更しました。これはすべてのオーバーヘッドがlsfitでなくても、大幅に高速化するはずです。

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のコードをコピーすることですが、もっと便利な解決方法があると思います。

答えて

12

お使いのバージョンでHMRパッケージで.HMR.fit1を交換する

?assignInNamespace 

を試してみてください。

の可能性のある重複:

あなたが機能を変更する edit=TRUEtrace機能を使用することができ、迅速検査のために

How do I override a non-visible function in the package namespace?

+0

古いものを変更するのではなく新しい関数を追加する場合は、このソリューションを使用してください:http://stackoverflow.com/a/3402159/684229 – TMS

6

、これは適切な名前空間に置き換えを行い、また、あなたがuntraceを使用できるようになります機能を元の状態に戻すことができます。これらの変更は、現在のセッションを超えて続くことはありません。

関連する問題