2016-11-27 18 views
0

Rのパッケージに複数の関数が含まれています(すべてエクスポートされています)。関数の1つが実行中に内部的に別の関数を呼び出します。しかし、私はパッケージ全体をロードせずに、名前空間を経由してこの機能を実行すると、それはエラーがスローされます:「関数を見つけることができませんでした..」名前空間から関数を呼び出すときに関数が見つからない

は、例えばの場合: foobarは2つの機能があります。 foobarを内部で呼び出します。しかし、fooを名前空間で呼び出すと、mypackage::foo()could not find function "bar"というエラーが発生します。ライブラリを最初にロードし、ネームスペース経由で実行すると、正しく実行されます。

#doesnot work 
mypackage::foo() 
could not find function "bar" 
#works 
library(mypackage) 
mypackage::foo() 

NAMESPACEファイルには、両方の関数がエクスポートされていますが、両方ともエクスポートされています。

答えて

0

::または::: fucを使用する際の問題は、機能コードだけがワークスペースに引き込まれることです。したがって、その中の補助機能または支援機能のいずれも、「インタプリタ空間」、すなわちインタプリタが見ることができるオブジェクトに引き込まれない。したがって、オプション2は機能し、オプション1は失敗します。何が私には明白な理由であるように思える。私はは、名前空間をロードから派生している知っている機能をハッキングしていた場合

は、私は一般的にハッキングのプロセスを終了:

environment(hacked_fun) <- environment(orig_fun) 

しかし、あなたがして、ディスクからコードを引っ張ったときには、オプションではありません"マルチコロン機能"。これは経験豊かなRプログラマーがパッケージで開発を行う主な理由です。パッケージを作成するコーディングの規範は、パッケージの依存関係の定義もサポートします。

+0

この問題を回避する方法はありますか?あるいは、この 'bar'関数をエクスポートせずに内部関数として作るだけですか? – PoisonAlien

+0

あなたはいつも関数のコードを見て、コピーを編集してmypackage ::: other_funcを使って依存関係を呼び出すことができます。 –

関連する問題