在
http://cran.r-project.org/可以下载R软件,选择Other,下载R_Scilab_DCOM3.0-1B5.exe,就是R(D)COM。
在安装了R(D)COM之后,假设安装目录为“D:\Program Files\(D)COM Server\bin“。在该目录下有RServerManager.exe,在VS2005中通过Add Reference->Browse,选择RServerManager.exe。添加以后,会增加RServerManager, ConnectorCommonLib,
STATCONNECTORSEVLib三个引用。可以通过VS2005的对象察看器看三个引用中的类和函数。
每次创建一个StatConnectorClass对象时,都会启动一个服务,用于处理一个连接对象所提交的请求,这个资源不会自己停止,所以需要一个类似于连接池的服务管理器。在R(D)COM中提供了两个类ServerPool和ServerItem来完成服务管理的功能。下面的类封装了该操作。
using System;
using STATCONNECTORSRVLib;
using RServerManager;
using System.Threading;
namespace Common.Regression
{
/**//// <summary>
/// BaseRegression 回归抽象基类
/// </summary>
public abstract class BaseRegression : IRegression
{
private static ServerPool mServerPool = null;
private ServerItem mServerItem = null;
private IStatConnector mStatConnector = null;
private static string mKey = "R";
private static string mClient = "this is client";
private static int mWaitTime = 50;
private static int mMaxLoop = 20;
private static int mMaxServerCount = 5;
private static int mServerCount = 0;
static BaseRegression()
{
if (mServerPool == null)
{
mServerPool = new ServerPool();
}
}
private double[,] mData;
public double[,] Data
{
get
{
return mData;
}
set
{
mData = value;
}
}
private RegressionSummary mSummary;
public RegressionSummary Summary
{
get
{
return mSummary;
}
set
{
mSummary = value;
}
}
/**//// <summary>
/// 执行回归函数
/// </summary>
public abstract void DoRegression();
/**//// <summary>
/// 得到执行R代码的连接
/// </summary>
/// <returns></returns>
protected IStatConnector GetStatConnector()
{
mServerItem = mServerPool.GetServerExclusive(mKey, mClient);
int count = 0;
while (mServerItem == null)
{
if (mServerCount < mMaxServerCount)
{
//当小于最小服务器数目时,增加连接
mStatConnector = new StatConnectorClass();
mStatConnector.Init(mKey);
mServerPool.Add(mStatConnector, mKey);
mServerCount++;
mServerItem = mServerPool.GetServerExclusive(mKey, mClient);
break;
}
if (count < mMaxLoop)
{
Thread.Sleep(mWaitTime);
count++;
mServerItem = mServerPool.GetServerExclusive(mKey, mClient);
}
else
{
return null;
}
}
mStatConnector = mServerItem.Server;
return mStatConnector;
}
/**//// <summary>
/// 释放锁定
/// </summary>
public void ReleaseLock()
{
if (mServerItem != null)
{
mServerItem.ReleaseLock();
}
}
public BaseRegression()
{
}
}
}
从BaseRegression继承的类将拥有可以被管理。
using System;
using System.Configuration;
namespace Common.Regression
{
/// <summary>
/// IRegression 回归类接口
/// </summary>
public interface IRegression
{
double[,] Data
{
get;
set;
}
RegressionSummary Summary
{
get;
}
void DoRegression();
void ReleaseLock();
}
}
分享到:
相关推荐
"C#调用R方法" 本文介绍了一种使用C#调用R语言的方法,尽管现在有更好的方法,但是了解经典方法仍然非常重要。下面详细说明如何在C#中调用R语言。 首先,需要在电脑中安装Visual Studio(测试环境是VS2005)和R...
3. rcom包的使用:rcom包是R语言中用于调用COM对象的包,它可以帮助R语言执行COM相关的操作,使得R能够以更深入的方式与Windows应用程序进行交互。 ***技术:组件对象模型(Component Object Model,简称COM)是一...
### R语言与C#混合编程技术详解 #### 一、基础知识概述 在现代软件开发领域,混合编程技术已经成为一种常见的实践方法,它允许开发者结合多种编程语言的优势来构建高效的应用程序。本文将深入探讨如何利用R语言和...
在软件开发过程中,有时候我们需要利用不同语言编写的库来实现特定的功能。本实验旨在介绍如何使用PHP调用一个由C#编写的DLL(动态链接库),以此来扩展PHP的功能。 #### 准备工作 在开始之前,请确保您已经安装了...
本文将详细介绍如何使用C#语言访问三菱PLC(CPU-R04)以及如何利用MxComponent4.16S库进行通讯。 首先,三菱PLC R系列是一款广泛应用于工业现场的控制器,它具备强大的运算能力和丰富的通讯接口。R04型号代表了该...
R语言通常与数据分析、统计建模和可视化紧密相关,然而结合“C#”标签,我们可以推测这是一个将R语言与游戏开发相结合的项目,可能利用了Rstudio的扩展性以及C#的强大编程能力。 C#是一种面向对象的编程语言,由...
在本文中,我们将深入探讨如何使用C#编程语言与三菱FX2N系列PLC进行串口通讯,实现数据的读写操作。三菱PLC(可编程逻辑控制器)广泛应用于自动化控制领域,而C#作为微软.NET框架的一部分,是编写工业控制软件的常用...
- 编写JNI(Java Native Interface)代码,将U3D的C#调用转化为对AS3.5的调用。 - 使用`System.loadLibrary`加载本地库,并在Java层创建对JNI方法的引用。 4. **集成和调试**: - 将AS3.5编译为AIR应用,并打包...
在C#编程中,熟练掌握快捷键可以极大地提高开发效率,减少不必要的鼠标操作,让你的编码过程更加流畅。以下是一些C#开发中常用的快捷键及其功能: 1. **格式化快捷键**: - `Ctrl + Shift + 向下键`:将选定控件的...
- 同时,还需要将MATLAB安装路径下的`D:\MATLABR2007a\toolbox\compiler\deploy\win32\MCRInstaller.exe`拷贝到目标计算机。 **步骤2:打包C#应用** - 使用Visual Studio的发布功能,对C#应用程序进行打包。 - 将...
本项目"GPS转百度地图坐标"是用C#编程语言实现的一个工具,用于将GPS获取的原始WGS84坐标转换为适合在百度地图上显示的BD09坐标。 首先,我们来了解一些基础概念: 1. **坐标系**:坐标系是地理空间位置的一种数学...
C#是一种广泛应用于游戏开发、桌面应用、移动应用和Web应用等领域的编程语言,由微软公司推出,旨在提高软件开发的生产力。对于初学者来说,掌握C#的快捷键能够极大地提升编程效率,减少手动输入代码的时间,使编程...
在C#中,可以使用`while`循环,每次循环检查所有可能的移动,并询问用户选择哪个方向,然后调用相应的移动方法。同时,还需要一个判断游戏结束的条件,例如,当无法进行任何合并且棋盘没有空位时,游戏结束。 ```...
R接口:R语言是统计分析领域广泛使用的语言,Gurobi提供接口以便R用户可以方便地解决优化问题。 5. 其他内容: a. 示例和教程:手册中提供了Python示例,包括简单示例和字典示例,以及如何构建和运行示例。 b. ...
以下是一个简单的示例代码,展示了如何使用C#调用`shutdown`命令来关机: ```csharp using System.Diagnostics; // 定义关机前的等待时间 int time = numericUpDown1.Value; // 调用shutdown命令,参数为关机和...
C#作为一种高效、强大的编程语言,拥有众多快捷键可以提升开发者的编程速度。本文将深入探讨C#的快捷键大全,帮助开发者们掌握这些实用技巧,提高编程效率。 首先,让我们了解什么是快捷键。快捷键是通过组合键来...
C#编译器是.NET框架的核心组成部分,它将C#源代码转换为可以在计算机上运行的中间语言(IL)或本地机器代码。在本项目中,开发者模仿了.NET框架自带的CSC.exe编译器,创建了一个批处理脚本来简化C#程序的编译过程。...
本程序的主要功能是利用C#语言读取一个Word文档的内容,并将这些内容展示在一个网页上。实现这一功能的关键技术包括:通过`Microsoft.Office.Interop.Word`命名空间调用Word对象模型来读取文档内容,以及如何将获取...
在本案例中,我们关注的是使用C#编程语言实现的线段裁剪,特别是Cohen-Sutherland算法。这个算法是图形学中的经典方法,用于裁剪2D线段与窗口边界。 Cohen-Sutherland算法基于编码系统,将线段端点的坐标映射到四个...