R-php をインストール & 使ってみた
Web ブラウザからサーバ上の R を実行できる PHP スクリプト、R-php をインストールしてみました。
ちなみに、R-php 自体は 2005 年から存在し、特に新しい技術、という訳でもないです。
以上の図のような構成で動作しており、計算はサーバ側で行います。
今回使用したサーバは、CentOS 5.4。以下、インストールの方法。作業は全て root で実行します。
1. Apache, PHP, MySQL, ImageMagick のダウンロード
既にインストール済みの場合は省略。以下のように、すべて yum でインストール可能。
# yum install httpd httpd-devel php php-devel php-mbstring php-mysql mysql mysql-server ImageMagick ImageMagick-devel
2. R をインストール
既にインストール済みの場合は省略。RHEL5 用を流用します。
# yum install libgfortran xdg-utils perl-File-Copy-Recursive # wget ftp://ftp.ecc.u-tokyo.ac.jp/CRAN/bin/linux/redhat/el5/i386/R-2.10.0-2.el5.i386.rpm # rpm -ihv R-2.10.0-2.el5.i386.rpm
うまくいかない場合は、下記の RPM をインストール。
# wget ftp://ftp.ecc.u-tokyo.ac.jp/CRAN/bin/linux/redhat/el5/i386/R-core-2.10.0-2.el5.i386.rpm # wget ftp://ftp.ecc.u-tokyo.ac.jp/CRAN/bin/linux/redhat/el5/i386/R-devel-2.10.0-2.el5.i386.rpm # wget ftp://ftp.ecc.u-tokyo.ac.jp/CRAN/bin/linux/redhat/el5/i386/libRmath-2.10.0-2.el5.i386.rpm # wget ftp://ftp.ecc.u-tokyo.ac.jp/CRAN/bin/linux/redhat/el5/i386/libRmath-devel-2.10.0-2.el5.i386.rpm # rpm -ihv R-core-2.10.0-2.el5.i386.rpm # rpm -ihv R-devel-2.10.0-2.el5.i386.rpm # rpm -ihv libRmath-2.10.0-2.el5.i386.rpm # rpm -ihv libRmath-devel-2.10.0-2.el5.i386.rpm
詳細はここ (CentOS 5.2 に R をインストールする - CMOSにっき) を参照。
3. R-php をダウンロード & インストール
R-php の公式サイト (http://dssm.unipa.it/R-php/) から最新版 (1.0) をダウンロードします。
# wget --content-disposition 'http://dssm.unipa.it/R-php/?cmd=downPack&pack=R-php-1.tar.gz' # tar xvzf R-php-1.tar.gz # rm R-php-1.tar.gz # mv R-php-1/ /var/www/R-php/
4. アクセス制限の設定
計算資源を誰でも使用できる状態は、さすがにマズいので、Digest 認証を設定します。
# vi /etc/httpd/conf.d/r-php.conf Alias /R-php "/var/www/R-php/" <Directory "/var/www/R-php"> AuthType Digest AuthName "R-php" AuthDigestDomain /R-php/ AuthUserFile /etc/httpd/conf/.htdigest_rphp Require valid-user </Directory> # htdigest -c /etc/httpd/conf/.htdigest_rphp 'R-php' R-php # service httpd restart
5.データベースの設定
R-php が、MySQLに R というデータベースを作成します。
MySQL 側で新しいデータベースを作成する、等といった作業は不要です。
次のファイルを編集します。
# vi /var/www/R-php/include/conf.php <? $dbuser = "(MySQL のユーザ)"; $dbpass = "(MySQL のパスワード)"; ?>
6. 画像出力の設定
R-php では、R が出力する画像を ImageMagick を使って、PS 形式から PNG 形式に変換しています。
しかし、現在のバージョンの R では PDF 形式がデフォルトなので、変更します。
/var/www/R-php/R/pages/result/index.php
# chmod +w /var/www/R-php/R/pages/result/index.php # vi /var/www/R-php/R/pages/result/index.php
<? ... /* 44 行目付近 */ //delfile("./pages/tmp/$temp/*.ps"); //コメントアウトする delfile("./pages/tmp/$temp/*.pdf"); //追加 /* 57 行目付近 */ //exec("$convert_command ./pages/tmp/$temp/Rplots.ps ./pages/tmp/$temp/R.png"); //コメントアウトする exec("$convert_command ./pages/tmp/$temp/Rplots.pdf ./pages/tmp/$temp/R.png"); //追加 /* 63 行目付近 */ //exec("$convert_command -antialias -rotate 90 $fn ./pages/tmp/$temp/$nn.png"); //コメントアウトする exec("$convert_command -antialias $fn ./pages/tmp/$temp/$nn.png"); //追加 ... ?>
/var/www/R-php/R-gui/pages/result/index.php
# chmod +w /var/www/R-php/R-gui/pages/result/index.php # vi /var/www/R-php/R-gui/pages/result/index.php
<? ... /* 77 行目付近 */ //delfile("./pages/tmp/$temp/*.ps"); //コメントアウトする delfile("./pages/tmp/$temp/*.pdf"); //追加 /* 106 行目付近 */ //exec("$convert_command ./pages/tmp/$temp/Rplots.ps ./pages/tmp/$temp/R.png"); //コメントアウトする exec("$convert_command ./pages/tmp/$temp/Rplots.pdf ./pages/tmp/$temp/R.png"); //追加 /* 112 行目付近 */ //exec("$convert_command -antialias -rotate 90 $fn ./pages/tmp/$temp/$nn.png"); //コメントアウトする exec("$convert_command -antialias $fn ./pages/tmp/$temp/$nn.png"); //追加 ... ?>
FAQ
- パッケージの使用は出来る?
- root で R を起動してインストールしたパッケージは、library() 関数で問題なく動作します。
- パッケージのインストールは出来る?
- install.packages(), file.remove(), scan() など、"危険なコマンド" は実行できないようになっています。
- 対話型の操作は出来る?
- 対話型の操作 (たとえば、BRugs の codamenu() など) には向いていないでしょうね。
- ヘルプは参照出来る?
- 未確認。
感想
- ところどころイタリア語が表示されて驚く。
- Ajax や ActionScript を駆使すれば、もっと利便性が向上すると思う。特に、ESS 的な機能を実装したい。
- 例えば、
- そもそも、2006 年からメンテナンスされていないっぽいので、作るなら、1 から作り直した方が良さそう。
- 時間に余裕があれば、SourceForge などのオープンソースプロジェクトで改良版作りたいですね。