R.NET使用文檔
介紹
本頁面涉及R.NET1.5.13。 1.5.13版本在功能上等同于1.5.12,但可作為一個包在NuGet.org上獲得。
R.NET使.NET框架與R統計語言在同一進程進行互操作。 R.NET需要.NET Framework 4的并有R環境中安裝的本地的DLL。您可以使用R.NET用在.NET的任何語言(它已被用于至少C#,F#,Vb.NET,IronPython中)。你使用這個文檔之前有幾個相關的事項都必須被提及。對于F#,你應該考慮F# - [R提供商。一個動機釋放1.5.13對于RProvider更輕松地管理R.NET依賴。
入門
這個網頁主要介紹R.NET是眾所周知的跨平臺運行。?
作為1.5.10版本,R.NET二進制文件是平臺無關的。您可能需要設置一些Linux發行版的小附加的解決方法(CentOS的是已知的),但你可以使用的。R.NET二進制文件來移動和跨平臺。
Visual Studio中
如果您正在使用從zip文件分發二進制文件,解壓縮文件和內容復制到您選擇的位置。添加項目引用到RDotNet.dll和RDotNet.Native.dll“通常”的方式。
NuGet是首選的方式來管理R.NET依賴性。
如果您正在使用的NuGet包:
首先,您必須安裝,如果你有沒有準備好,通過工具的的NuGet包管理器 - 擴展和更新:
Visual Studio中
如果您正在使用從zip文件分發二進制文件,解壓縮文件和內容復制到您選擇的位置。添加項目引用到RDotNet.dll和RDotNet.Native.dll“通常”的方式。
的NuGet是首選的方式來管理R.NET依賴性。
如果您正在使用的NuGet包:
首先,您必須安裝,如果你有沒有準備好,通過工具的的NuGet包管理器 - 擴展和更新:
您可以添加R.NET包作為一個依賴于一個或多個項目在您的解決方案。對于一個項目:
請注意,你或許應該卸載軟件包的依賴或R.NET1.5.5或更早的版本,如果預先存在的。
R.NET1.5.13使用不同的包裝標識:R.NET.Community。請務必使用搜索R.NET上的NuGet最近條目:
該系統的NuGet然后增加了一些依賴。
您可以一氣呵成的解決方案級別管理的幾個項目:
你可以找到有關的NuGet在文檔的NuGet更一般的信息?
http://docs.nuget.org/
入門編碼
R.NET1.5.10及以后的版本包括顯著明顯的變化,以緩解2塊絆腳石,處理方式往往是由用戶處理:路徑與R共享庫,并防止發動機多初始化。
下面的“Hello World”示例說明了如何使用新的API為90%的在Windows窗體上使用的情況下更簡單:
static void Main(string[] args) { REngine.SetEnvironmentVariables(); // <-- May be omitted; the next line would call it. REngine engine = REngine.GetInstance(); // A somewhat contrived but customary Hello World: CharacterVector charVec = engine.CreateCharacterVector(new[] { "Hello, R world!, .NET speaking" }); engine.SetSymbol("greetings", charVec); engine.Evaluate("str(greetings)"); // print out in the console string[] a = engine.Evaluate("‘Hi there .NET, from the R engine‘").AsCharacter().ToArray(); Console.WriteLine("R answered: ‘{0}‘", a[0]); Console.WriteLine("Press any key to exit the program"); Console.ReadKey(); engine.Dispose(); }
您檢索單個REngine對象實例,設置必要的環境變量之后。甚至調用SetEnvironmentVariables可以省略,但我們會建議你把它明確。 SetEnvironmentVariables,在Windows上,著眼于建立是R安裝程序的注冊表設置。如果需要,您可以覆蓋行為設置環境變量和發動機初始化用自己的方式,在附錄中詳細說明。
示例代碼
你通常與REngine對象交互的方法是Evaluate,GetSymbol和SetSymbol。創建R向量和矩陣,所述REngine對象具有擴展方法如CreateNumericVector,CreateCharacterMatrix等。最后,可以以各種方式調用R里面的函數,使用Evaluate方法執行REngine對象,并且還更直接。?
基本的例子采用t-test統計
它是可從示例代碼在:https://github.com/jmp75/rdotnet-onboarding獲取。
static void Main(string[] args) { REngine.SetEnvironmentVariables(); REngine engine = REngine.GetInstance(); // REngine requires explicit initialization. // You can set some parameters. engine.Initialize(); // .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); // you should always dispose of the REngine properly. // After disposing of the engine, you cannot reinitialize nor reuse it engine.Dispose(); }
數字向量
下面的代碼示例說明了最常用的功能。它是從樣本代碼2萃取在https://github.com/jmp75/rdotnet-onboarding,這個例子說明了數值向量的基本操作。
var e = engine.Evaluate("x <- 3");// You can now access x defined in the R environment NumericVector x = engine.GetSymbol("x").AsNumeric(); engine.Evaluate("y <- 1:10"); NumericVector y = engine.GetSymbol("y").AsNumeric();
調用R里面的函數
雖然你可以通過生成字符串并用Evaluate函數調用,并調用Evaluate方法,這可能是笨拙的,因為你傳遞大量數據。下面演示了如何可以調用一個函數,有點像你會如何映射在.NET中并調用一個函數。
// Invoking functions; Previously you may have needed custom function definitions
var myFunc = engine.Evaluate("function(x, y) { expand.grid(x=x, y=y) }").AsFunction(); var v1 = engine.CreateIntegerVector(new[] { 1, 2, 3 }); var v2 = engine.CreateCharacterVector(new[] { "a", "b", "c" }); var df = myFunc.Invoke(new SymbolicExpression[] { v1, v2 }).AsDataFrame();
R.NET1.5.10包含了許多改進,以支持直接調用函數從C#,用更少的字符串操作,少REngine.Evaluate溝通。
// As of R.NET 1.5.10, more function call syntaxes are supported. var expandGrid = engine.Evaluate("expand.grid").AsFunction(); var d = new Dictionary<string, SymbolicExpression>(); d["x"] = v1; d["y"] = v2; df = expandGrid.Invoke(d).AsDataFrame();
我們使用expand.grid的結果繼續進行,將下面的代碼說明,雖然R.NET試圖模仿R的行為來對應數據集。數據集為R的數據結構的核心部分,所以值得擴展,下面幾個例子:
engine.SetSymbol("cases", df); // As of R.NET 1.5.10, factor to character expressions work consistently with R var letterCases = engine.Evaluate("cases[,‘y‘]").AsCharacter().ToArray(); // "a","a","a","b","b","b", etc. Same as as.character(cases[,‘y‘]) in R // Note that this used to return "1", "1", "1", "2", "2", etc. with R.NET 1.5.5
還有其他的方法來提取數據集的列,而不通過R表達式字符串:
// Equivalent:
letterCases = df[1].AsCharacter().ToArray(); letterCases = df["y"].AsCharacter().ToArray();
2維索引返回的行為通常直接反映了R.。唯一的例外是行名失蹤,R的行為是值得商榷的,所以R.NET喜歡嚴格。
// Accessing items by two dimensional indexing
string s = (string)df[1, 1]; // "a" s = (string)df[3, 1]; // "a" s = (string)df[3, "y"]; // "b" // s = (string)df["4", "y"]; // fails because there are no row names df[3, "y"] = "a"; s = (string)df[3, "y"]; // "a" df[3, "y"] = "d"; s = (string)df[3, "y"]; // null, because we have an <NA> string in R
調用R腳本
要重用整個腳本,最簡單的方法是使用R中的“sourece”方法
engine.Evaluate("source(‘c:/src/path/to/myscript.r‘)");
遺漏值
占位符,展示了不同各種向量類型NA值的相互交互轉換情況,在后面的頁面中能找到數據類型部分的詳細介紹。
進一步的例子
縱觀根據項目RDotNet.Tests單元測試將提供R.NET用途和編程成語的進一步信息。展示出的數據傳輸的速度。
運行時性能
占位符,顯示出最佳做法,以最大限度地提高運行速度
其他例子還記錄
占位符?
處理的日期和時間
數據類型
R中的所有表達式都表示為Symbolic Expression對象在R.NET對象中。對于數據訪問,下面有特殊類定義。請注意,“NA”在R特殊值值用于某些類型在這里沒有直接等同于.NET中的對象,但要注意這種行為,以免風險計算不正確。
表如下。如下R.NET類構成了R和.NET框架之間的橋梁。
R | R.NET | .NET Framework | Note |
---|---|---|---|
character vector | RDotNet.CharacterVector | System.String[] | ? |
integer vector | RDotNet.IntegerVector | System.Int32[] | The minimum value in R is -2^31+1 while that of .NET Framework is -2^31. Missing values are int.MinValue |
real vector | RDotNet.NumericVector | System.Double[] | Missing values are represented as double.NaN |
complex vector | RDotNet.ComplexVector | System.Numerics.Complex[] | System.Numerics assembly is required for .NET Framework 4. |
raw vector | RDotNet.RawVector | System.Byte[] | ? |
logical vector | RDotNet.LogicalVector | System.Boolean[] | ? |
character matrix | RDotNet.CharacterMatrix | System.String[, ] | ? |
integer matrix | RDotNet.IntegerMatrix | System.Int32[, ] | The minimum value in R is -2^31+1 while that of .NET Framework is -2^31. |
real matrix | RDotNet.NumericMatrix | System.Double[, ] | ? |
complex matrix | RDotNet.ComplexMatrix | System.Numerics.Complex[, ] | Reference to System.Numerics assembly is required. |
raw matrix | RDotNet.RawMatrix | System.Byte[, ] | ? |
logical matrix | RDotNet.LogicalMatrix | System.Boolean[, ] | ? |
list | RDotNet.GenericVector | ? | From version 1.1. |
data frame | RDotNet.GenericVector | ? | From version 1.1.?RDotNet.DataFrame class is also available (below). |
data frame | RDotNet.DataFrame | ? | From version 1.3.?And from version 1.5.3,DataFrameRowAttribute and DataFrameColumnAttribute?are available for data mapping. |
function | RDotNet.Function | ? | From version 1.4.?Including closure, built-in function, and special function. |
factor | RDotNet.Factor | System.Int32[] | From version 1.5.2. |
S4 | RDotNet.S4Object | ? | Not Available Yet. See S4 branch in the source control. |
demo1
http://rdotnet.codeplex.com/wikipage?title=Examples&referringTitle=Home
demo2
http://dynamicdatadisplay.codeplex.com/
c#調用R語言(原創翻譯)
標簽:class???log???com???代碼???使用???http???src???si???java???
原文:http://blog.csdn.net/guoer9973/article/details/45953471