2017-08-18 4 views
0

私は2つのRスクリプトを持っています。 scriptBは、scriptB例えばlibrary(x)を呼び出すため、xが、しかしknitr又はstringrであるか、またはいくつかの他のパッケージRスクリプトを入手する際にパッケージをロードする場所

場合のScriptaとscriptB両方が同じlibrary(x)をロード

(「scriptB.R」)源を介してのScriptaで呼び出されますscriptAはlibrary(x)をアンロードしてから、スクリプトBをロードします(library(x))。これは、次のエラーにつながる:私はなぜこれが起こっているかわからないので

Error in unloadNamespace(package) : 
    namespace 'x' is imported by 'y' so cannot be unloaded 
Error in library(x) : Package 'x' version n.nn cannot be unloaded 

私は実際にソーススクリプトでunloadNamespaceを呼び出すことはありませんか?どのように私はアンロードを防ぐことができます。 scriptAでrequire()を使用するだけで正常に動作しないのですか?

だから私の質問は以下のとおりです。

  1. は私がしようとしてからスクリプトを避けるにはどうすればよい友好的な方法

  2. をRスクリプトからオブジェクトを含めるための最良の方法Rスクリプトを調達するか、そこですパッケージxをアンロードするには?

+0

既にスクリプトAで 'library(x)'を使用している場合は、スクリプトBで 'library(x)'を実行する必要はありません。 –

+1

'library(x)'を呼び出しても、 1回または複数回。あなたのコードを投稿してください。 –

答えて

0

OKソートしました。私が思っていた問題は、scriptAまたはBで古いバージョンのstringrを使用していたため、パッケージを更新したところ、うまくいきました。バージョン管理の違いがある場合、Rが同じライブラリをアンロードし、おそらく最後に呼び出されるライブラリが優先されると思います。それが私の唯一の説明です。

しかし、私はrstudioがパッケージの1つのバージョンを保持していますが、私はそれをロードするときにライブラリのバージョンを指定しなかったので少し混乱しています。

関連する問題