Consuming RdotNET

February 17, 2011
By

(This article was first published on Naught Not Knot, and kindly contributed to R-bloggers)

In my explorations with R, Mathematica, FreeMat, MatLab, and RapidMiner (now with R support! Yay!), I’m seeing integration of R to be quite useful in building a trading app, as technical analysis is one of R’s fortés. For the sake of brevity, I’m including comments in the code instead of using paragraphs…use the source, Luke.
Note that I'm not using the R(D)COM package, but the RdotNET package found here. It's open source (thanks for the correction, Carlitos) closed source, unfortunately, and I've noted bugs when consuming with F# (which I may do a write-up, if I'm more successful with it - I could be Doing It Wrong).

The Source, Luke:

   1: using System;
   2: using System.Linq;
   3: using RDotNet;
   4:  
   5: namespace R.NET_Wrapper
   6: {
   7:     class Program
   8:     {
   9:         public static void Main(string[] args)
  10:         {
  11: //Console.WriteLine("Hello World!");
  12: // Point the R Engine to the dll dir
  13:             RDotNet
  14:             .REngine
  15:             .SetDllDirectory(
  16:                 @"C:\Program Files\R\R-2.12.1\bin\i386"
  17:             );
  18:             
  19: // make an instance, go ahead, do it
  20:             using
  21:                 (REngine engine =
  22:                     REngine
  23:                     .CreateInstance("RInstance")
  24:                 )
  25:             {
  26:                 // Let's see what it'll do.
  27:                 // Let's create a numeric vector with a double[]
  28:                 // .NET framework array to vector
  29:                 NumericVector group1 =
  30:                     engine.CreateNumericVector(
  31:                         new double[] {
  32:                             30.02,
  33:                             29.99,
  34:                             30.11,
  35:                             29.97,
  36:                             30.01,
  37:                             29.99
  38:                     });
  39:                 engine
  40:                 .SetSymbol("group1", group1);     // Dont forget this!
  41:  
  42:                 // Here's the sssllooww way
  43:                 NumericVector group2 =
  44:                     engine
  45:                     .EagerEvaluate(
  46:                     "group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)")
  47:                     .AsNumeric();
  48:                 // EagerEvaluate will also accept IO.Stream (R scripts, anyone?)
  49:  
  50:                 // Test difference of mean (student's t-test) and get P-value
  51:                 GenericVector testResult =
  52:                     engine
  53:                     .EagerEvaluate("t.test(group1, group2)")
  54:                     .AsList();
  55:                 double p =
  56:                     testResult["p.value"]
  57:                     .AsNumeric()
  58:                     .First();
  59:  
  60:                 Console.WriteLine(
  61:                     "Group 1 [{0}]",
  62:                     string.Join(
  63:                         ", ",
  64:                         group1.Select(i => i.ToString()))
  65:                 );
  66:                 Console.WriteLine(
  67:                     "Group 2 [{0}]",
  68:                     string.Join(
  69:                         ", ",
  70:                         group2.Select(i => i.ToString())
  71:                     )
  72:                 );
  73:                 Console.WriteLine("P-value = {0:0.000}", p);
  74:             }
  75:  
  76:              
  77:             //+ TODO: finish getting data into managed space
  78:             
  79:             Console.Write("Press any key to continue . . . ");
  80:             Console.ReadKey(true);
  81:         }
  82:     }
  83: }

To leave a comment for the author, please follow the link and comment on his blog: Naught Not Knot.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: , ,

Comments are closed.