Excel と R via VSTO
RExcelアドインを使ってExcelとR連携は前々回テストしましたが、VSTOを使ってRを呼び出すテストをしてみました。
これには、“C#, Python で R.NET”でテストしたR.NETを使います。
プロジェクトは“LINQ/VSTO”と同じ方法で作成します。
環境: Excel2010, R 3.0.0 / Windows 7
VisualStudio 2010 参照設定追加
RDotNet
RDotNet.NativeLibrary
using System; using System.Data; using System.IO; using System.Linq; using System.Text; using RDotNet; using Excel = Microsoft.Office.Interop.Excel; namespace ExcelWorkbook3 { public partial class Sheet1 { private void InternalStartup() { DataTable table = new DataTable(); Excel.Worksheet activeSheet = ((Excel.Worksheet)Application.ActiveSheet); var envPath = Environment.GetEnvironmentVariable("PATH"); var rBinPath = @"C:\Program Files\R\R-3.0.0\bin\i386"; Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath); using (REngine engine = REngine.CreateInstance("RDotNet")) { engine.Initialize(); StringBuilder plotCommmand = new StringBuilder(); plotCommmand.Append(@"rnorm(100)"); var e = engine.Evaluate(plotCommmand.ToString()); int k = 1; foreach (var v in e.AsNumeric().ToArray<double>()) { activeSheet.Cells[k, 1].Value = v; k++; } } } } }
R側では正規分布の乱数を生成するrnorm関数を使い、その出力をExcelシートに表示させます。Excel側では、グラフ表示をして正規分布を確認しました。(手動)
(ちなみにRのPlotを呼び出すこともできます)
このような単純な例では、どんな連携方法も大差ありませんが、その他に組み合わせるものがある場合、いろいろと解決方法を知っておくと便利です。