web-dev-qa-db-ja.com

コマンドラインでrコードを実行するとパッケージエラーが発生する

この部分を含むいくつかのコードを実行しています。

if (!require("yaml")) {
  install.packages("yaml") 
  library("yaml")
}

Rstudioで実行すると、すべてがシームレスに実行され、バグはありません。ただし、コマンドラインでコードを実行しようとすると、次のエラーが表示されます。

$ Rscript.exe file.R
Loading required package: yaml
Installing package(s) into ‘/usr/lib/R/site-library’
(as ‘lib’ is unspecified)
Error in contrib.url(repos, type) :
  trying to use CRAN without setting a mirror
Calls: install.packages -> grep -> contrib.url
In addition: Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘yaml’
Execution halted
35
kng

RStudioは、RStudio内からinstall.packagesを呼び出すときにデフォルトのリポジトリを設定します。コマンドラインからスクリプトを実行するとき、使用するリポジトリをRに指示する必要があります(またはグローバルなデフォルトリポジトリを設定します)。

お気に入りのリポジトリを使用するようにRに指示することで、この問題を簡単に修正できます。

たとえば、RStudioのパッケージリポジトリを使用する場合は、repos="http://cran.rstudio.com/"呼び出し内でinstall.packagesを設定します。

if (!require("yaml")) {
  install.packages("yaml", repos="http://cran.rstudio.com/") 
  library("yaml")
}

これは動作するはずです!

53
ialm