備忘ログ

チラシの裏的備忘録&メモ

CRAN上のRのmac os用のバイナリパッケージをdownload.packages()関数を用いてダウンロードするときの注意のメモ

CRAN上のRのmac os用のバイナリパッケージをdownload.packages()関数を用いてダウンロードする時に注意が必要であったのでメモしておく。(R 4.2.x以降のもの)

これは内部でdownload.packages()関数を用いてパッケージをダウンロードしている{miniCRAN}パッケージでmac osのバイナリパッケージ用のリポジトリを作成しようとするときも同様にtype引数に渡す値に注意が必要となる(後述するdownload.packages()と同じ引数を渡す必要がある)。{miniCRAN}以外にもdonload.packages()を内部的に使用している場合には同様の注意が必要と思われる。install.packages()もこの影響を受けると思うが、あえてmac os上でtypeを指定する機会も少ないのか影響は限定的だと思う。

download.packages()でバイナリパッケージをダウンロードするときにはtype引数を指定すると良いと書いており、詳細はinstall.packages()のドキュメントを読めとかいている。指示に従い参照すると次のようなことが書いている。

Possible values of type are (currently) "source", "mac.binary", and "win.binary": the appropriate binary type where supported can also be selected as "binary".

つまり、type引数は、sourcemac.binarywin.binary、そしてbinaryを受け付けると書いている。つまり、mac os用のバイナリパッケージをダウンロードしたかったらtype = mac.binaryと書けば良さそう。

だが実際には、

download.packages("miniCRAN", destdir = ".", type = "mac.binary")
#> Warning: unable to access index for repository https://cran.rstudio.com/bin/macosx/contrib/4.4:
#>   cannot open URL 'https://cran.rstudio.com/bin/macosx/contrib/4.4/PACKAGES'
#> Warning in download.packages("miniCRAN", destdir = ".", type = "mac.binary"):
#> no package 'miniCRAN' at the repositories
#>      [,1] [,2]

とダウンロードに失敗する。Warning Messageを読むと、リポジトリのインデックスに正しくアクセスできていないといっている。参照しているリポジトリのURLはhttps://cran.rstudio.com/bin/macosx/contrib/4.4となっている(cran.rstudio.comの部分は指定しているCRANの参照先によって実行環境ごとによって異なると思う)。

CRANのmac os用のページを参照すると、

となっており、arm版とintelx86)版がそれぞれあるのが分かる(パッケージのページでも分かる)。試しに、arm版をのぞいてみると

となっており、ディレクトリがhttps://cran.rstudio.com/bin/macosx/contrib/4.4ではなく、https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.4であるべきと分かる。つまり、参照先が誤っているからバイナリパッケージをダウンロードできていなかったことが分かる。

どうすればいいかというと、type引数はarm版をダウンロードしたかったら"mac.binary.big-sur-arm64"とし、インテルx86)版は"mac.binary.big-sur-x86_64"とするといい。

download.packages("miniCRAN", destdir = ".", type = "mac.binary.big-sur-arm64")
#>      [,1]       [,2]                  
#> [1,] "miniCRAN" "./miniCRAN_0.3.0.tgz"

"mac.binary.big-sur-x86_64"も同様(ダウンロードしたパッケージは一見するとarm版も、インテルx86)版も一緒なので一緒にダウンロードする場合は注意が必要)。

ドキュメント上のバグでは?と思ったらちゃんとBugzillaでも報告されていた。

bugs.r-project.org

2年くらいまえに報告されており、今年対応された様子。github上で見られるsvnリポジトリのコピーでも修正が確認できる。

github.com

なのでそのうちのリリース版でドキュメントが修正されていると思う。

関数のドキュメント読んでいてもハマる(しドキュメントには解決策が見当たらない)ので結構ハマると辛いと思う。CRANのディレクトリ構造と、ソースコードを読むと解決の糸口が見えてくるがややハードル高めだと思った。

あまりこのことについて書かれた記事を見つけることができなかったので、あんまり困っている人は少ないかもしれない。が自分はこれで小一時間くらいハマったのでメモしておく。