関数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を用いる際に、パッケージのインストールや読み込みに関する質問が減ることが、このコードへの主な期待である。