最近Office Professionalを買ったので,近頃はもっぱらOfficeで遊んでいる.Officeはちょっとバグとか多くて難しいから,よく勉強をして早く初心者を脱出したい.
で,ここ2〜3日はExcelからRを呼ぶ方法をいろいろ調べていた.やっぱVBAちょっとくらい勉強しないと駄目かなとか思い始めた頃,RExcelというExcelのアドインを見つけた(statconn).これを使うと結構実用的なレベルでExcelとRを連携させられそう*1.
RExcelのインストール
まず,rscproxyとrcomの2つのパッケージをRから入れておく.下の二行はRExcelのインストール時にやれっていわれたからやった*2.
install.packages("rscproxy") install.packages("rcom") library(rcom) comRegisterRegistry()
statconnよりstatconnDCOMとRExcelのダウンロード&install*3.
追記:どうもパッケージからインストールできるらしい.といってもstatconnDCOMとRExcelのインストーラを落としてきて実行するだけっぽいけど.wikiによると以下のコードを管理者権限で立ち上げたR上で実行すればいいらしい.
try(detach("package:rscproxy", unload = TRUE), silent = TRUE) try(detach("package:rcom", unload = TRUE), silent = TRUE) try(detach("package:RExcelInstaller", unload = TRUE), silent = TRUE) install.packages("rcom") library(rcom) installstatconnDCOM() dummy <- comRegisterRegistry() install.packages("RExcelInstaller") library(RExcelInstaller) installRExcel()
参考:http://learnserver.csd.univie.ac.at/rcomwiki/doku.php?id=wiki:how_to_install
RExcelの起動
デモ用のワークシートを開く
RExcelからDemo Wroksheetsを選択するとRExcelのデモ用ワークシートが開ける.これはstatconnにあるRExcelの解説動画で使用しているものと同じ.動画を見てデモ用ワークシートを一通り動かしてみれば使い方は分かると思うので,以下主要な点だけを.
Rのコードを実行する
- セルにRのコードを記入する.途中で改行して次のセルに行っても良い.
- 右クリックしてRun codeを実行すると式が評価される.
これだけでRのコードが実行される.
出力を得る方法にはいろいろあるけれど,たとえばRのコンソールへ出力されるはずだったものをそのままセルへペーストするには右クリックからGet R Outputを選択する.また,ちょっとした式を実行して出力だけほしいときは右クリックしてGet R Valueを選択し,式や参照したい変数名を記入する.もしくはセルに書いておいてセルを参照することもできる.
また,RApplyやREvalという関数(Excel側)を使うことでもRのコードを実行できる.たとえばセルA1:A5の範囲に含まれる数値の平均をExcelのAVERAGE関数ではなくRのmean関数で計算する場合なら,
=RApply("mean", A1:A5)
といった具合.出力はこの関数を記述したセルになる.この場合,A1:A5の中身を書き換えてセルを再計算すればちゃんと計算結果も更新される.つまり,あたかもExcelの関数であるかのようにRの関数を扱えるわけだ.ただこのとき再計算には若干の時間がかかる.といってもミリ秒の単位なのでそれほど気にはならないが,自動で再計算する設定になっていると(これはExcel側の設定)多少気になるかもしれない.再計算は手動でする設定に変えておいた方がいいだろう.
ほかにもRを使用するのに便利なExcelの関数がいくつか使用可能になる.詳しくはデモ用ワークシートのWorksheet functionsを参照のこと.また,マクロ記述に便利なVBA用の関数もいくつか使用可能になる.こちらはWriting macrosを参照.
RExcelに組み込みの関数群を使用することで,データフレームを眺めつついじりつつ関数の実行結果を観察するなんてことも容易になる.R Commanderなんかに比べるとずいぶん…
R Commanderの実行
で,そのR Commanderだが,なんとRExcelから呼び出せる.呼び出せるどころか,メニューバーを乗っ取ってExcel上に表示することができる.RExcelからR Commander,with Excel menusとたどって起動する.すると,ツールバーの部分にR Commanderのメニューバーが表示される.R Commanderの方は哀れ(?)メニューバーなしの状態で起動する.
たとえばその状態でデータフレーム状に入力されたセル範囲を選択し,Put R DataFrameを実行すると,それをそのままR Commanderのアクティブデータフレームにすることができ,R Commanderでの操作一式をExcel上から実行できるのだ.
またプロットを実行した場合,それはいつもと同じようにデフォルトのグラフィックデバイス上(WindowsならR Graphics)に描画されるわけだが,その状態で右クリックしてInsert Current R Plotを実行すると現在のプロットをExcelのワークシート上に貼り付けることができる.
ほかにも便利な機能がいろいろあるので
ぜひデモの動画をみてワークシートを動かしてみましょう.
あとはwikiも参考に:http://learnserver.csd.univie.ac.at/rcomwiki/doku.php
しかしVBAのShell関数使ってちょっと動かしてみました(最初私がやろうとしていた)というレベルではなくて,普通に使えそうなレベルなのはやっぱすごい.
Excelに記入したデータをそのままExcel上で「ちゃんと」統計処理できる.Excelだと複雑になりがちな上に信頼性も不安な分散分析や多重比較がR Commanderを使ってGUIでできる.プロット結果をワークシートの上に仕舞っておける.
これは大変便利!なので,多分私は今後つかいますん.
ちなみにRExcelの詳しいことはR Through Excel: A Spreadsheet Interface for Statistics, Data Analysis, and Graphics (Use R!)に書いてあるらしいので,誰か読んで私に教えてください.