関数requireはパッケージが利用可能かどうかを確認して、利用可能なら読み込んでくれてTRUEを返し、利用可能でないならFALSEを返して終了する。 関数libraryはパッケージを読み込もうとしてくれて、成功すればそのまま終了し、失敗すればエラーを表示して処理を中断する。 関数install.packagesは、こちらが指定したパッケージをそれに付随するパッケージも含めてインストールしてくれる。
これを、現在使用しているRの状態に合わせて、読み込むだけだったり、インストールしてから読み込んでくれたりする関数を用意した。
#require.with.install.packages.if.needed: # リストで与えられたライブラリがインストール済みかどうかをチェックし、 # 必要ならインストールした上で、利用可能にする関数。 # この関数は理解しなくても大丈夫。 require.with.install.packages.if.needed = function(packages) { require.2 = function(p) { if( eval(parse(text = paste0("require(",p,")" ) ) ) ) { cat(paste(p, "is loaded. \n")) } else { cat(paste("trying to install", p, "... \n")) install.packages(p) if( eval(parse(text = paste0("require(",p,")" ) ) ) ) { cat(paste(p, "is loaded. \n")) } else { stop(paste(p, "could not be installed. \n")) } } } if(is.list(packages)) { for( k in packages) { require.2(k) } } else { require.2(packages) } }
授業でRを用いる際に、パッケージのインストールや読み込みに関する質問が減ることが、このコードへの主な期待である。