{{category 統計解析ソフトR}} *情報を探す・検索する Rは一文字の名前であるが故に情報を通常の検索エンジンのAND検索では見つけるのが難しい。そこで、以下のようにすると良いことが多い。 **日本語の情報 RjpWikiで検索。PukiWikiの全文検索はサーバに負担をかけるのでページ下方にあるGoogle検索フォームから検索すると良い。 **英語の情報 R ProjectのWebサイトでサイト内検索をする。[こちら|http://cran.r-project.org/search.html]にGoogleを利用したサイト内検索フォームがあるのでこれを使えばよい。 *演算を速くする **ATLASを利用したBLAS/LAPACKの最適化 Rは線形演算などにBLASやLAPACKといったライブラリを利用していますが、これらはCPUごとにアルゴリズム最適化により大幅に高速化できることがあります(最大で十数倍くらいらしい)。 しかし従来、アルゴリズム最適化は面倒な作業でした(やったこと無いので伝聞です)。そこで開発されたのがATLASという、最適化を簡単な質問に答えることで自動的に実行してくれるものです。これを利用して最適化したBLASやLAPACKを利用するように作成したRでは、線形演算が極めて高速になるものもあります。 Rは各種OS向けにコンパイル済のバイナリが提供されていますが、上記の最適化を施すには当然ソースからコンパイルする必要があります。ですが、Windowsでは元々OSが重くてリソース食いのため、そこまでして最適化するくらいならいっそのこと演算用にLinuxなりFreeBSDなりをインストールしたUNIXマシンを用意されることをお薦めします(Windowsマシンの方が早いこともありますが、大容量メモリを使ったり長時間演算にかかる場合はUNIXマシンの方が安心できると思います。が、所詮好みではある)。 Windowsの場合、[こちら|http://toucan.stats.ox.ac.uk/R/RWin/ATLAS/]から手持ちのCPU用DLLを落としてきてRインストールディレクトリのbinディレクトリ下に上書きコピーすれば最適化BLASを利用した演算が行われます(from [[RjpWiki:なんでも掲示板]])。 ATLASは、LAPACKの一部も最適化して出力してくれます(CBLASも)が、一部だけなので、最適化済のフルLAPACKを得るには +ATLASの実行・libatlas・libf77blasなどをインストール +LAPACKのコンパイル時に「-lf77blas -latlas」を指定して最適化済BLASを参照させる +最適化済LAPACKの部品を「ar x」で分解 +分解した*.oファイルを非最適化済フルLAPACKに「ar r」で上書き +必要ならさらにCLAPACKのコンポーネントも同様に組み込む(Rには不要) とする必要があります。 FreeBSD portsから入れる場合、ATLASは最適化済BLASだけでなくlibalapackという名前で最適化済コンポーネントを含んだLAPACKをインストールしてくれます。ただし、そのままではL2キャッシュサイズを標準の4MBとしてコンパイルしてしまいますので、portsのMakefileの ANSWER_i386?= ${PRINTF} "\n\n\n\n\n\n\n\n\n\n" という行を ANSWER_i386?= ${PRINTF} "\n\n\n\n512\n\n\n\n\n\n" などと書き換えます。512の部分は手持ちのマシンのCPUに搭載されているL2キャッシュサイズをKBで指定します。私のマシンはAMD Athlon XP 2500+ (Bartnコア)でL2キャッシュサイズは512KBなので512と指定しているわけです。 LinuxやWindowsの場合、[こちら|http://www.cs.utexas.edu/users/kgoto/]のlibgotoを使う方がATLASによる最適化よりも高速な結果が得られるとのことです。 **スタティックライブラリを使う これも下のコンパイルオプションの一つではありますが別項として紹介します。 上述の通り、Rはいくつかの演算ライブラリを利用していますが、普通にコンパイルするとダイナミックリンクするため、プラグラムサイズは小さくできるもののライブラリ呼び出しの際にオーバーヘッドが生じてしまいます。そこで、コンパイルオプションに「-static」を加えるなどすることで、ライブラリをプラグラム内に取り込んでしまうことにより呼び出しのオーバーヘッドを無くし、高速化することができます。 **コンパイルオプションの指定 Rのコンパイル時にコンパイラへ最適化オプションを渡すことで演算が高速になることがあります。特に、Intel Pentium4ではSSE、SSE2、SSE3を利用するようにコンパイルするとかなりの高速化が得られる処理もあるようです(倍精度も含めた浮動小数点演算を多用する処理の場合)。gccではconfigure時に以下のように指定します。 CFLAGS = -march=pentium4 -mfpmath=sse -msse -msse2 FFLAGS = -march=pentium4 -mfpmath=sse -msse -msse2 他にもオプションは色々ありますので支障の無い範囲で指定すると速度が改善するかもしれません。ただし、「-ffast-math」オプションなどは精度を落として高速化する(こともある)ものですので指定しない方が良いでしょう。オプションの指定時には各オプションの意味を理解した上で指定しましょう。 *FreeBSDのportsで日本語化パッチを適用してコンパイル・インストールする FreeBSDのportsで何も考えずにmakeするとATLASを利用していない、日本語化されていないRがコンパイル・インストールされます。 まず、ATLASを利用するにはportsのports/math/atlasもしくはports/math/atlas-develをインストールの上でpoers/math/Rで make WITH_ATLAS=yes としてコンパイルすればOKです。 日本語化を適用するには、下記のスクリプトをports/math/Rをカレントとして実行してからmakeして下さい(make patchしてからwork/R-2.0.0/src/main/gram.cを削除する必要があるかもしれません)。ただし、下記スクリプトはR-2.0.0のportsになかま氏のパッチを当てるように作られています。Rやパッチのバージョンが違ったりする場合には適宜書き換える必要があります(2.0.1では[こちら|http://r.nakama.ne.jp/R-2.0.1/source/R-2.0.1_jp.tar.gz]のファイルをdistfilesに置いた上でdistinfoを書き換えればたぶんいける)。 #!/bin/sh mkdir files cd files fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.main.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.main.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.main\///g' R-2.0.0.i18n.main.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.main.20041005.patch mv R-2.0.0.i18n.main.20041005.patch patch-a fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.gnome.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.gnome.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.gnome\///g' R-2.0.0.i18n.gnome.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.gnome.20041005.patch mv R-2.0.0.i18n.gnome.20041005.patch patch-b fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.regex.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.regex.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.regex\///g' R-2.0.0.i18n.regex.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.regex.20041005.patch mv R-2.0.0.i18n.regex.20041005.patch patch-c fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.regexQC.20041102.patch perl -pi -e's/R-2\.0\.0\///g' R-2.0.0.i18n.regexQC.20041102.patch perl -pi -e's/\.orig//g' R-2.0.0.i18n.regexQC.20041102.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.regexQC.20041102.patch mv R-2.0.0.i18n.regexQC.20041102.patch patch-c fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.tcltk.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.tcltk.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.tcltk\///g' R-2.0.0.i18n.tcltk.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.tcltk.20041005.patch mv R-2.0.0.i18n.tcltk.20041005.patch patch-d fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.win_mb.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.win_mb.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.win_mb\///g' R-2.0.0.i18n.win_mb.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.win_mb.20041005.patch mv R-2.0.0.i18n.win_mb.20041005.patch patch-e fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.i18n.x11_mb.20041005.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.i18n.x11_mb.20041005.patch perl -pi -e's/R-2\.0\.0\.i18n\.x11_mb\///g' R-2.0.0.i18n.x11_mb.20041005.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.i18n.x11_mb.20041005.patch mv R-2.0.0.i18n.x11_mb.20041005.patch patch-f fetch http://r.nakama.ne.jp/R-2.0.0/patchs/R-2.0.0.l10n.pstex.20041006.patch perl -pi -e's/R-2\.0\.0\.orig\///g' R-2.0.0.l10n.pstex.20041006.patch perl -pi -e's/R-2\.0\.0\.l10n\.pstex\///g' R-2.0.0.l10n.pstex.20041006.patch perl -pi -e's/^diff .+\n$//' R-2.0.0.l10n.pstex.20041006.patch mv R-2.0.0.l10n.pstex.20041006.patch patch-g cd .. rm -f work/R-2.0.0/src/main/gram.c perl -pi -e's/^(CONFIGURE_ENV=\t)/$1CFLAGS="-DI18N_MB -DL10N_JP" /' Makefile *パッケージを全部入れる > packs<-CRAN.packages(contriburl=contrib.url("http://cran.md.tsukuba.ac.jp/")) で指定したミラーからパッケージのリストを取得する。 > install.packages(packs[,1],contriburl=contrib.url("http://cran.md.tsukuba.ac.jp/")) で指定したミラーからパッケージを全てダウンロード&インストールする。 参考 [[RjpWiki:追加パッケージをなんでもかんでも追加する]]