c#調用R

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框架之間的橋梁。

RR.NET.NET FrameworkNote
character vectorRDotNet.CharacterVectorSystem.String[]?
integer vectorRDotNet.IntegerVectorSystem.Int32[]The minimum value in R is -2^31+1 while that of .NET Framework is -2^31. Missing values are int.MinValue
real vectorRDotNet.NumericVectorSystem.Double[]Missing values are represented as double.NaN
complex vectorRDotNet.ComplexVectorSystem.Numerics.Complex[]System.Numerics assembly is required for .NET Framework 4.
raw vectorRDotNet.RawVectorSystem.Byte[]?
logical vectorRDotNet.LogicalVectorSystem.Boolean[]?
character matrixRDotNet.CharacterMatrixSystem.String[, ]?
integer matrixRDotNet.IntegerMatrixSystem.Int32[, ]The minimum value in R is -2^31+1 while that of .NET Framework is -2^31.
real matrixRDotNet.NumericMatrixSystem.Double[, ]?
complex matrixRDotNet.ComplexMatrixSystem.Numerics.Complex[, ]Reference to System.Numerics assembly is required.
raw matrixRDotNet.RawMatrixSystem.Byte[, ]?
logical matrixRDotNet.LogicalMatrixSystem.Boolean[, ]?
listRDotNet.GenericVector?From version 1.1.
data frameRDotNet.GenericVector?From version 1.1.?RDotNet.DataFrame class is also available (below).
data frameRDotNet.DataFrame?From version 1.3.?And from version 1.5.3,DataFrameRowAttribute and DataFrameColumnAttribute?are available for data mapping.
functionRDotNet.Function?From version 1.4.?Including closure, built-in function, and special function.
factorRDotNet.FactorSystem.Int32[]From version 1.5.2.
S4RDotNet.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

轉載于:https://www.cnblogs.com/crhdyl/p/5241493.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257610.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257610.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257610.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java applet 文本框_Java Applet 文本框 TextField 小例 | 學步園

一個Java Applet程序中必須有一個類是Applet類的子類&#xff0c;成為該子類是Java Applet的主類&#xff0c; 并且必須是public class。 Applet類是包java.applet中的一個類&#xff0c; 同時它還是包java.awt中Container(容器)類的子類。因此Java Applet的主類的實例是一個容…

python界面工具pyqt基礎教程

這里有一份很詳細的中文翻譯供我們學習pyqt&#xff0c;很適合初學者和中級學者&#xff0c;直接丟傳送門&#xff0c;不多說 http://www.qaulau.com/books/PyQt4_Tutorial/introduction.html轉載于:https://www.cnblogs.com/semishigure/p/7451689.html

博客園客戶端(睡睡版iphone)源碼

1.關于 https://itunes.apple.com/us/app/shui-shui-bo-ke-yuan/id512394144?ls1&mt8 項目目前為V3.0版&#xff0c;也是我開發的最新版&#xff0c;目前已無法在appstore下載&#xff0c;項目介紹&#xff1a;http://www.cnblogs.com/bandy/p/3509482.html 2.現狀 目前本…

Spring MVC不要在@Service bean中保存狀態

先看這么一段代碼&#xff1a; Service public class AccountService {private String message;public void foo1() {if (true) {this.message "a";} else {this.message "b";}}public void foo2() {// 改動this.message的代碼...// ... ...} }假設你打算…

java class 關鍵字_java關鍵字及其作用

一、 關鍵字總覽:訪問控制privateprotectedpublic類,方法和變量修飾符abstractclassextendsfinalimplementsinterfacenativenewstaticstrictfpsynchronizedtransientvolatile程序控制breakcontinuereturndowhileifelseforinstanceofswitchcasedefault錯誤處理trycatchthrowthro…

3.過濾數據 ---SQL

一、使用WHERE子句 SELECT prod_name, prod_price FROM Products WHERE prod_price 3.49; 輸出▼ prod_name prod_price ------------------- ---------- Fish bean bag toy 3.49 Bird bean bag toy 3.49 Rabbit bean bag toy 3.49 分析▼ 這條語句從products表中檢索兩個列&a…

IOS-C語言第8天,Struct (結構體)

轉載于:https://www.cnblogs.com/xiangrongsu/p/4309160.html

Win2D 入門教程 VB 中文版 - 防止內存泄漏

避免內存泄漏 本文從微軟官方文檔翻譯 http://microsoft.github.io/Win2D/html/RefCycles.htm 如果文檔有問題&#xff0c;可以在 https://github.com/Nukepayload2/Win2dDocVB發 Issue&#xff0c;也可以直接回復。 當在托管的 XAML 應用程序中使用 Win2D 控件&#xff0c;需要…

java concurrent 鎖_java并發機制鎖的類型和實現

synchronized 和 volatile&#xff0c;是最基礎的兩個鎖&#xff01;volatile是輕量級鎖&#xff0c;它在多核處理器開發中保證了共享變量的可見性。即當一個線程修改一個共享變量時&#xff0c;其他線程能夠讀到這個修改的值。它比syncronized使用和成本更低。要說volatile的實…

JAXB和XStream比較

這兩東東本質上是有差別的&#xff0c;JAXB稱為OX binding工具&#xff0c;XStream應該算序列化工具&#xff0c;但OX binding工具也會marshall和unmarshall&#xff0c;所以包含了序列化這一部分。序列化工具不一定需要提供binding的功能。既然都玩序列化&#xff0c;那就簡單…

【起航計劃 011】2015 起航計劃 Android APIDemo的魔鬼步伐 10 App-Activity-Reorder Activities 后退棧 Intent FLAG...

Reorder Activities 示例有四個相關的Activitives: ReorderOnLaunch, ReorderTwo,ReorderThree, ReorderFour。其中ReorderOnLaunch為主Activity&#xff0c;ReorderOnLaunch啟動ReorderTwo &#xff0c;ReorderTwo啟動 ReorderThree&#xff0c;ReorderThree啟動 ReorderFour。…

java date dateformat_java中Date與DateFormat的格式輸出

一、DateFormatjava.text.DateFormat使用 getDateInstance 來獲取該國家/地區的標準日期格式。另外還提供了一些其他靜態工廠方法。使用 getTimeInstance 可獲取該國家/地區的時間格式。使用 getDateTimeInstance 可獲取日期和時間格式。可以將不同選項傳入這些工廠方法&#x…

spartan6不能直接把時鐘連到IO上

1、問題的提出&#xff1a;spartan6中不允許時鐘信號直接連到IO口上面&#xff1f; 2、解決辦法&#xff1a;ODDR2的使用 ODDR2Primitive: Double Data Rate Output D Flip-Flop with Optional Data Alignment, Clock Enable and Programmable Synchronous or Asynchronous Set…

STL容器及適配器

STL容器 1.序列式容器 &#xff1a; vector&#xff0c;deque&#xff0c;list。 每個元素都有固定的位置&#xff08;取決于插入的時機和位置&#xff0c;與元素值無關&#xff09;。 vector 特點&#xff1a; 將一個元素置于一個動態數組中加以管理&#xff0c;可以隨機存取元…

Html5 Canvas斗地主游戲

過完年來公司&#xff0c;沒什么事&#xff0c;主管說研究下html5 游戲&#xff0c;然后主管就給了一個斗地主的demo&#xff0c;隨后我就開始看代碼&#xff0c; 現在我看了html5以及canvas相關知識和斗地主的demo后&#xff0c;自己用demo上的素材試著寫了個斗地主&#xff0…

java流的傳遞方式是_如何在方法中流式傳輸Java List(Varargs)的值?

我有以下方法&#xff1a;public static List getValuesExclusion(A exclusion) {return Arrays.stream(values()).filter(item -> item ! exclusion).collect(Collectors.toList());}//this function returns enum list of A types that has no A typeexclusion現在我想將它…

JAVA作業——JAVA課程的總結及學習計劃

JAVA作業——JAVA課程的總結及學習計劃 NO.1 總結 在上一年的學習中&#xff0c;對JAVA語言比較陌生&#xff0c;英語基礎不好&#xff0c;so學習起來有點困難&#xff0c;對JAVA的一些語法和編程記得比較少。 NO.2 計劃 對過去一年的認真反思之后&#xff0c;我的計劃如下&…

由LintCode問題子集出發,淺析ArrayList的拷貝問題

在做LintCode上的遞歸類題目子集時&#xff0c;我一開始的想法是遞歸到最后一層即單元素時然后開始逐層返回&#xff0c;產生相應的每層的子集并添加到最終的結果中去。于是乎有了以下代碼&#xff1a; public List<List<Integer>> findSolution(int[] nums, int b…

大小端模式詳解

http://www.cnblogs.com/xinsheng/archive/2012/04/18/2455039.html 端模式&#xff08;Endian&#xff09;的這個詞出自Jonathan Swift書寫的《格列佛游記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類&#xff0c;從圓頭開始將雞蛋敲開的人被歸為Big Endian&#xf…

.NET 跨平臺服務端資料

OWIN Web API: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api 用于寫API的 OWIN SignalR: http://www.dotnetcurry.com/signalr/915/owin-katana-signalr-web-server 用于寫即時通訊的轉載于:https://www.cnblogs.com/Jarvin…