Project Description: R.NET enables .NET Framework to collaborate with R statistical computing. R.NET requires .NET Framework 4 and native DLLs installed with R environment. You need no other extra installations. Enjoy statistics and programming in your special language with R.

Some examples are below. Learn how to use R.NET.


2014-02-23 We are working towards a new release of R.NET. Several notable features, improvements and fixes will be available in this updated release once testing is finalized.

Available in NuGet Gallery

R.NET 1.5 of binary is released in NuGet Gallery (only Windows version). Just type "Install-Package R.NET" to install it.

Also, there's an F# specific package, RDotNet.FSharp, and an alpha-release graphics engine package, RDotNet.Graphics.

Current Issues

  • Current version of R.NET is not able to draw charts on the default window device on Windows natively (but see How to display an R Graph in a .NET Winform). Graphics engine alpha release is included in the distribution (RDotNet.Graphics.dll). It is also available via NuGet. Only interfaces are included (no implementation).
  • Multiple initialization fails (in multiple engines running at the same time ): this problem occurs because native R cannot make multiple initialization in single process.


  • This example illustrates how R.NET works with C#. More examples are available at Examples page.

using System;
using System.IO;
using System.Linq;
using RDotNet;

class Program
   static void Main(string[] args)
      // Set the folder in which R.dll locates.
      // See Documentation for automatic search of installation path.
      // This example set PATH environment variable for 64-bit process and R x64 on Windows.
      // You should appropriately set the correct location for other cases.
      // Refer to the Documentation page.
      var envPath = Environment.GetEnvironmentVariable("PATH");
      var rBinPath = @"C:\Program Files\R\R-x.y.z\bin\x64"; 
      Environment.SetEnvironmentVariable("PATH", envPath + Path.PathSeparator + rBinPath);

      // For Linux or Mac OS, R_HOME environment variable may be needed.
      //Environment.SetEnvironmentVariable("R_HOME", "/usr/lib/R")

      using (REngine engine = REngine.CreateInstance("RDotNet"))
         // From v1.5, REngine requires explicit initialization.
         // You can set some parameters.

         // .NET Framework array to R vector.
         NumericVector group1 = engine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97, 30.01, 29.99 });
         engine.SetSymbol("group1", group1);
         // Direct parsing from R script.
         NumericVector group2 = engine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02, 29.98)").AsNumeric();

         // Test difference of mean and get the P-value.
         GenericVector testResult = engine.Evaluate("t.test(group1, group2)").AsList();
         double p = testResult["p.value"].AsNumeric().First();

         Console.WriteLine("Group1: [{0}]", string.Join(", ", group1));
         Console.WriteLine("Group2: [{0}]", string.Join(", ", group2));
         Console.WriteLine("P-value = {0:0.000}", p);

Related Projects

  • R to CLR: an R package to access CLR objects from R, in contrast to R.NET.
  • F# R Provider: an F# library to provide static typed functions exposed by R packages thanks to type provider mechanism.

Last edited Feb 23 at 10:42 AM by jperraud, version 24