require()
との違いは何library()
ですか?
8 に答える
日常業務ではほとんどありません。
ただし、両方の関数のドキュメントによると (?
関数名の前に a を入力して Enter キーを押すとアクセスできます)、require
関数内で使用されます。警告を出力し、パッケージが見つからない場合は続行しますがlibrary
、エラーがスローされます。
のもう 1 つの利点はrequire()
、既定で論理値を返すことです。TRUE
パッケージがロードされている場合、ロードされFALSE
ていない場合。
> test <- library("abc")
Error in library("abc") : there is no package called 'abc'
> test
Error: object 'test' not found
> test <- require("abc")
Loading required package: abc
Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called 'abc'
> test
[1] FALSE
したがって、以下のような構造で使用できrequire()
ます。これは主に、パッケージがインストールされていない可能性がある R インストールにコードを配布する場合に便利です。
if(require("lme4")){
print("lme4 is loaded correctly")
} else {
print("trying to install lme4")
install.packages("lme4")
if(require(lme4)){
print("lme4 installed and loaded")
} else {
stop("could not install lme4")
}
}
すでに与えられた良いアドバイスに加えて、これを追加します:
返される値を実際に使用する場合をrequire()
除き、使用を避けるのがおそらく最善です。
それ以外のほとんどの場合は、 を使用することをlibrary()
お勧めします。これは、パッケージが利用できない場合、パッケージの読み込み時にエラー メッセージが表示されるためです。require()
パッケージがそこにない場合、エラーなしで失敗します。これは、パッケージをインストールする必要があるかどうかを確認するのに最適な時期です (または、スペルが間違っているために存在すらしていない可能性があります)。エラー フィードバックを適切なタイミングで早期に取得することで、後のコードがライブラリ ルーチンを使用しようとしたときに失敗する理由を突き止めるという頭痛の種を回避できます。
違いについての私の最初の理論はlibrary
、パッケージが既にロードされているかどうかに関係なく、パッケージをrequire
ロードすることでした。特定のパッケージに依存する)。ただし、ドキュメントはこれに反論しており、どちらの関数も既にロードされたパッケージをリロードしないと明示的に述べています。
これは、すでにロードされているパッケージとの違いのようです。require と library の両方がパッケージをロードしないのは事実ですが。ライブラリは、チェックして終了する前に、他にも多くのことを行います。
とにかく2mil回実行する関数の先頭から「require」を削除することをお勧めしますが、何らかの理由でそれを保持する必要がある場合. require は、技術的にはより高速なチェックです。
microbenchmark(req = require(microbenchmark), lib = library(microbenchmark),times = 100000)
Unit: microseconds
expr min lq mean median uq max neval
req 3.676 5.181 6.596968 5.655 6.177 9456.006 1e+05
lib 17.192 19.887 27.302907 20.852 22.490 255665.881 1e+05