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.mzph.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…