概要
R Markdownに必要なknitrパッケージをRにインストールしようとしてもできなくてハマった話です。knitrだけでなくその他のいくつかのパッケージもRにインストールできませんでした。私はUbuntu 14.04に$ sudo apt-get install r-base
でRをインストールしていたのですが、これだけでは最新のRがインストールされないことが原因でした。最新のRをUbuntuにインストールする方法は UBUNTU PACKAGES FOR R - CRAN にあります。日本語の説明は UbuntuにRをインストールするための手順 - トライフィールズ が分かりやすいです。ポイントはCRANのレポジトリを追加しないと最新版がインストールできないことです。この記事では私のトラブルの話と、上記リンクの補足になるレポジトリやSecure APTの解説を書きます。もし、Ubuntuに今すぐRをインストールしたい方がいましたら、上記リンクに飛んでください。
R Markdownを使いたいのにknitrパッケージがインストールできない
私はRで計算して計算結果をノートにまとめてブログに記事を投稿するのに、次のようなことをしています。
- RStudioで新規プロジェクトを開く。
- スクリプトファイルにコメントとコードを書いて、
Ctrl + Enter
で実行する。 - 2を繰り返して計算がまとまったら、コンソール出力をノート(Evernote)にコピペする。合わせて考察やメモをノートに書く。
- 記事にしたいノートをブログの草稿にコピペして、それを基にMarkdownで記事を書く。
- 記事をブログに投稿する。
記事やレポートを書いていると、計算をやり直したり、新しい計算をする時がよくあります。自分用と人用の文章では書き方が違うからです。その時にRプロジェクトを開いて、計算して、Evernoteにコピペして、記事にもコピペして、という工程はめちゃめちゃ面倒です。面倒だからノートに計算結果を書かずに記事にだけ書いたりして、後から見直す時に情報がばらばらになっていてわけがわかりません。
それで、このいわゆる計算の再現性が低い状態を何とかしたいと思っていました。他の人はどうしているのかと調べていたらR Markdownというものがあって、これでコード、コードの実行結果、説明を加えたレポートの作成をR Markdownで一貫して行えるというじゃありませんか。素晴らしいです。私も使いたい。
R Markdownで楽々レポートづくり - gihyo.jp に習って、とりあえずサンプルのRmdファイルをダウンロードしてRStudioでhtmlに変換しようとしたら、「knitrパッケージが必要だからインストールしてね」的なメッセージが表示されてできませんでした。じゃあ、knitrパッケージをインストールしようかと試みましたが、
> install.packages("knitr")
Installing package into ‘/home/user/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
Warning in install.packages :
package ‘knitr’ is not available (for R version 3.0.2)
Warningが出てインストールできません。
実はこの時点でまさにknitrパッケージをインストールできない原因を、Rは
package ‘knitr’ is not available (for R version 3.0.2)
と教えてくれていました。しかし私はUbuntuにRをインストールしたばかりで最新バージョンのRを使っていると思い込んでいたため、使っているRのバージョンが古いなんて思いもしませんでした。さらに私がアホなのは、エラーの原因を探して How should I deal with “package 'xxx' is not available (for R version x.y.z)” warning? - Stack Overflow を見つけていたにも関わらず、この回答がやたら長くて読むのがめんどうだから真面目に考えるのはやめてその日は寝たことです。翌日から日常に流されてこのQ and Aをすっかり忘れてしまいました。
いくら調べてもパッケージがインストールできない原因がわからない
2、3日あいて、やっぱりR Markdownが使いたくて、再度knitrパッケージのインストールを試みました。レポジトリを指定してもエラーが返されます。
> install.packages("knitr", repos=getOption("https://cran.r-project.org"))
Installing package into ‘/home/user/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
Warning: invalid package ‘knitr’
Error: ERROR: no packages specified
ERROR: no package specified? スペルミスか、そもそもknitrパッケージなんて存在しないのかと思い、CRANのウェブサイトを見たら https://cran.r-project.org/package=knitr にちゃんとあります。
使用可能なパッケージを見たら何かわかるかもしれないと思い、見てみました。
> ap <- available.packages()
> View(ap)
変数ap
を "knitr" でフィルタリングしたら、ezknitrやknitrBootstrapパッケージはあっても、knitrはありません。
何かしらの原因で実際のレポジトリの内容と使っているレポジトリの内容が食い違っているのかと想像しましたが、それ以上のことはわかりませんでした。
Rをアップデートしてみようかと思いつく
2016年6月にUbuntuにRをインストールしたばっかりだけど、knitrのラストアップデートが2016年8月とRをインストールしたよりも後だったので、Rをアップデートしてみようかと思いつきました。Rのインストールは$ sudo apt-get install rhoge
だと思ったのですが正確に思い出せないので、これを機にウェブで調べたら UbuntuにRをインストール - Qiita に、
何も考えずにapt-get install r-baseとすると、実は大変古いバージョンがインストールされます。
と書いてありました。
え?うそでしょうと思いつつ、Rのバージョンを確かめたら、
$ R
R version 3.0.2 (2013-09-05) -- "Bug in Your Hair"
3年前のバージョンでした(´д`) てっきり最新バージョンだと思い込んでいました。
これが原因だとようやく気づき、上記のQiitaの記事の参考ページ UbuntuにRをインストールするための手順 - トライフィールズ の通りにRを再インストールしました。
How should I deal with “package 'xxx' is not available (for R version x.y.z)” warning? - Stack Overflow をよく読むとこのことが書かれているので、原因に気づくのに無駄な時間がかかってしまいました。
UbuntuにRの最新バージョンをインストールする
この節ではUbuntuにRをインストールする流れを解説しながら書きます。オリジナルソースは UBUNTU PACKAGES FOR R - CRAN です。本稿はオリジナルソースにはないSecure APTなどの補足説明があります。
Ubuntuはバージョンで異なるコードネームがあり、CRANはコードネーム別にRのバイナリパッケージ(debファイル)を用意しています。debファイルはレポジトリ https://cran.r-project.org/bin/linux/ubuntu/ にまとめられています。他にもミラーサイトが世界中にあり、CRAN Mirrorsにミラーサイトのリストがあります。UbuntuのaptはデフォルトではCRANのレポジトリをソースリストに含みませんので、どれか1つのレポジトリを追加する必要があります。これが以下の作業です。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"
lsb-release
(LSB: Linux Standard Base)から私のUbuntuのコードネームはtrustyだとわかります。例えば日本のCRANミラーサイトに The Institute of Statistical Mathematics, Tokyo があります。このミラーサイトのtrustyのdebファイルは https://cran.ism.ac.jp/bin/linux/ubuntu/trusty にあります(TOP > Software > R Binaries > linux > ubuntu > trusty
とたどれます)。そこで、aptのソースリストファイルにこのレポジトリを追加します。
$ sudo gedit /etc/apt/sources.list
でファイルを開き、
deb https://cran.ism.ac.jp/bin/linux/ubuntu trusty/
この一行を最終行に追加します(なぜ /ubuntu/trusty/ ではなく /ubuntu trusty/ なのかわかりません)。
Secure APTを使わなくてよいなら、この段階で、
$ sudo apt-get update
$ sudo apt-get install r-base
とすればUbuntuへの最新バージョンのRのインストールは完了します。
Secure APT(公開鍵暗号方式でレポジトリ-ローカル間を暗号通信する)でインストールをする場合、aptに公開鍵を登録します。
$ gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9
$ gpg -a --export E084DAB9 | sudo apt-key add -
gpgは暗号化ソフトウェアで GnuPGで遊ぶ - そんなこと覚えてない に分かりやすい説明があります。keyserver.ubuntu.com はgpgで使用する鍵のデータベースで、鍵の照会や提供などを行うサーバーです。E084DAB9は鍵IDです。なぜこの鍵IDを使うのかというと、UBUNTU PACKAGES FOR R - CRAN に
The Ubuntu archives on CRAN are signed with the key of “Michael Rutter marutter@gmail.com” with key ID E084DAB9
と書かれているように、M. Rutterさんが鍵をgpgで作成した際に割り振られたIDがE084DAB9だからです。
gpgはユーザーID(名前 メールアドレス)で鍵を照会することができます。
$ gpg --search-keys marutter
gpg: searching for "marutter" from hkp server keys.gnupg.net
(1) Launchpad PPA for marutter
1024 bit RSA key B04C661B, created: 2010-11-14
(2) Michael Rutter <marutter@gmail.com>
2048 bit RSA key E084DAB9, created: 2010-10-19, expires: 2020-10-16
Keys 1-2 of 2 for "marutter". Enter number(s), N)ext, or Q)uit > q
鍵ID E084DAB9の鍵は、2048bitのRSA暗号で作成されたことがわかります。
$ gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9
gpg: requesting key E084DAB9 from hkp server keyserver.ubuntu.com
gpg: key E084DAB9: public key "Michael Rutter <marutter@gmail.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
このコマンドによりkeyserver.ubuntu.comからID E084DAB9の鍵が取り寄せられます。鍵が取り寄せできたかは、
$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
-------------------------------
pub 2048R/E084DAB9 2010-10-19 [expires: 2020-10-16]
uid Michael Rutter <marutter@gmail.com>
sub 2048R/1CFF3E8F 2010-10-19 [expires: 2020-10-16]
で確かめられます。
$ gpg -a --export E084DAB9 | sudo apt-key add -
鍵はバイナリファイルですので-a
オプションをつけてアスキーコードに変換した鍵を標準出力し、apt-keyに加えます。加えた鍵を確認するには、
$ apt-key list
/etc/apt/trusted.gpg
...
pub 2048R/E084DAB9 2010-10-19 [expires: 2020-10-16]
uid Michael Rutter <marutter@gmail.com>
sub 2048R/1CFF3E8F 2010-10-19 [expires: 2020-10-16]
...
とすれば確認できます。
この後、暗号通信ではないaptと同様にアップデートしてRをインストールしました。
$ sudo apt-get update
$ sudo apt-get install r-base
CRANのレポジトリを追加して、Secure APTでインストールしたRのバージョンを確かめると、
$ R
R version 3.4.1 (2017-06-30) -- "Single Candle"
ちゃんと最新のR 3.4.1にアップデートできました。
knitrパッケージを再度インストールする
Rにknitrパッケージをインストールします。
> install.packages("knitr")
Installing package into ‘/home/user/R/x86_64-pc-linux-gnu-library/3.3’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/src/contrib/knitr_1.14.tar.gz'
Content type 'unknown' length 1017858 bytes (994 KB)
==================================================
downloaded 994 KB
* installing *source* package ‘knitr’ ...
** package ‘knitr’ successfully unpacked and MD5 sums checked
** R
** demo
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
* DONE (knitr)
The downloaded source packages are in ‘/tmp/Rtmpy19JUG/downloaded_packages’
Rにknitrパッケージのインストールも無事にできました!R Markdownのサンプルファイルもhtmlにできました。これでようやくR Markdownの準備が整いました。