`
yuyuqian521
  • 浏览: 47492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

怎样用C#调用R软件:R(D)COM(二)

阅读更多
     在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();
 
 
     }
 
 }
分享到:
评论
1 楼 ryusukekenji 2009-10-04  
我想通过 R(D)COM 和 RExcel 在 Excel 使用 R ,但是一直出现错误信息,请问你是否熟悉 RExcel 呢?

相关推荐

    一种C#调用R的方法

    "C#调用R方法" 本文介绍了一种使用C#调用R语言的方法,尽管现在有更好的方法,但是了解经典方法仍然非常重要。下面详细说明如何在C#中调用R语言。 首先,需要在电脑中安装Visual Studio(测试环境是VS2005)和R...

    C#和R语言的混合编程案例

    3. rcom包的使用:rcom包是R语言中用于调用COM对象的包,它可以帮助R语言执行COM相关的操作,使得R能够以更深入的方式与Windows应用程序进行交互。 ***技术:组件对象模型(Component Object Model,简称COM)是一...

    R语言和C#混合编程

    ### R语言与C#混合编程技术详解 #### 一、基础知识概述 在现代软件开发领域,混合编程技术已经成为一种常见的实践方法,它允许开发者结合多种编程语言的优势来构建高效的应用程序。本文将深入探讨如何利用R语言和...

    实验用PHP调用DLL

    在软件开发过程中,有时候我们需要利用不同语言编写的库来实现特定的功能。本实验旨在介绍如何使用PHP调用一个由C#编写的DLL(动态链接库),以此来扩展PHP的功能。 #### 准备工作 在开始之前,请确保您已经安装了...

    PLC通讯实现-C#访问三菱PLC(CPU-R04)-MxComponent4.16S

    本文将详细介绍如何使用C#语言访问三菱PLC(CPU-R04)以及如何利用MxComponent4.16S库进行通讯。 首先,三菱PLC R系列是一款广泛应用于工业现场的控制器,它具备强大的运算能力和丰富的通讯接口。R04型号代表了该...

    Rstudio:Rstudio游戏项目

    R语言通常与数据分析、统计建模和可视化紧密相关,然而结合“C#”标签,我们可以推测这是一个将R语言与游戏开发相结合的项目,可能利用了Rstudio的扩展性以及C#的强大编程能力。 C#是一种面向对象的编程语言,由...

    c#与三菱PLC通讯读写实例

    在本文中,我们将深入探讨如何使用C#编程语言与三菱FX2N系列PLC进行串口通讯,实现数据的读写操作。三菱PLC(可编程逻辑控制器)广泛应用于自动化控制领域,而C#作为微软.NET框架的一部分,是编写工业控制软件的常用...

    U3D调用AS3.5.rar

    - 编写JNI(Java Native Interface)代码,将U3D的C#调用转化为对AS3.5的调用。 - 使用`System.loadLibrary`加载本地库,并在Java层创建对JNI方法的引用。 4. **集成和调试**: - 将AS3.5编译为AIR应用,并打包...

    快捷使用C#-----C#中的一些快捷键

    在C#编程中,熟练掌握快捷键可以极大地提高开发效率,减少不必要的鼠标操作,让你的编码过程更加流畅。以下是一些C#开发中常用的快捷键及其功能: 1. **格式化快捷键**: - `Ctrl + Shift + 向下键`:将选定控件的...

    C#与MATLAB接口和打包

    - 同时,还需要将MATLAB安装路径下的`D:\MATLABR2007a\toolbox\compiler\deploy\win32\MCRInstaller.exe`拷贝到目标计算机。 **步骤2:打包C#应用** - 使用Visual Studio的发布功能,对C#应用程序进行打包。 - 将...

    C#GPS坐标转百度地图坐标

    本项目"GPS转百度地图坐标"是用C#编程语言实现的一个工具,用于将GPS获取的原始WGS84坐标转换为适合在百度地图上显示的BD09坐标。 首先,我们来了解一些基础概念: 1. **坐标系**:坐标系是地理空间位置的一种数学...

    c#快捷键大全,方便初学者快速编程

    C#是一种广泛应用于游戏开发、桌面应用、移动应用和Web应用等领域的编程语言,由微软公司推出,旨在提高软件开发的生产力。对于初学者来说,掌握C#的快捷键能够极大地提升编程效率,减少手动输入代码的时间,使编程...

    2048源代码c#版

    在C#中,可以使用`while`循环,每次循环检查所有可能的移动,并询问用户选择哪个方向,然后调用相应的移动方法。同时,还需要一个判断游戏结束的条件,例如,当无法进行任何合并且棋盘没有空位时,游戏结束。 ```...

    gurobi学习手册,很好用的自定义机器学习数学建模编程语言

    R接口:R语言是统计分析领域广泛使用的语言,Gurobi提供接口以便R用户可以方便地解决优化问题。 5. 其他内容: a. 示例和教程:手册中提供了Python示例,包括简单示例和字典示例,以及如何构建和运行示例。 b. ...

    c#使用shutdown关机命令让xp和vista关机

    以下是一个简单的示例代码,展示了如何使用C#调用`shutdown`命令来关机: ```csharp using System.Diagnostics; // 定义关机前的等待时间 int time = numericUpDown1.Value; // 调用shutdown命令,参数为关机和...

    C#快捷键大全(TXT版本)

    C#作为一种高效、强大的编程语言,拥有众多快捷键可以提升开发者的编程速度。本文将深入探讨C#的快捷键大全,帮助开发者们掌握这些实用技巧,提高编程效率。 首先,让我们了解什么是快捷键。快捷键是通过组合键来...

    C#编译器

    C#编译器是.NET框架的核心组成部分,它将C#源代码转换为可以在计算机上运行的中间语言(IL)或本地机器代码。在本项目中,开发者模仿了.NET框架自带的CSC.exe编译器,创建了一个批处理脚本来简化C#程序的编译过程。...

    c# 读取WORD的内容并显示在页面上

    本程序的主要功能是利用C#语言读取一个Word文档的内容,并将这些内容展示在一个网页上。实现这一功能的关键技术包括:通过`Microsoft.Office.Interop.Word`命名空间调用Word对象模型来读取文档内容,以及如何将获取...

    C#图形学-线段裁剪

    在本案例中,我们关注的是使用C#编程语言实现的线段裁剪,特别是Cohen-Sutherland算法。这个算法是图形学中的经典方法,用于裁剪2D线段与窗口边界。 Cohen-Sutherland算法基于编码系统,将线段端点的坐标映射到四个...

Global site tag (gtag.js) - Google Analytics