`
yuyuqian521
  • 浏览: 46882 次
  • 性别: 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# for CSDN 乱七八糟的看不懂

    第4页 C#(WINFORM)学习 } Enum 需要放在 class 外面,才能被其它 class 的程序调用。 C#关键字 关键字 abstract as base bool break byte case catch char checked class const continue decimal default ...

    Java-PHP-C#

    那应该怎么样来检验暑假是否正确呢? 在PHP中加入了正则表达式的支持,让我们可以十分方便的进行数据匹配。 2 什么是正则表达式: 简单的说,正则表达式是一种可以用于模式匹配和替换的强大工具。在几乎所有的...

    c#等待提示对话框 防界面假死 更新了

    与前版功能基本相似,修正了部分bug,对界面进行了美化,目前这个美化相信应该够用了,因为时间问题没有增加可自定义界面功能,等有时间再提供吧,压缩文件使用“好压”做的,里面有一个例子,图片资源编辑工具,大家...

    c#调用api控制windows关机示例(可以重启/注销)

    方法一:调用windows自带的shutdown.exe (缺点:会出现倒计时窗口) System.Diagnostics.Process.Start(“shutdown.exe”, “-r -f -t 15”); shutdown参数含义:-r关闭并重启动此计算机;-f 强制运行的应用程序关闭...

    C#坦克大战代码(电脑版本跟手机版本)

    现在毕业了,因为工作中用的是C#,最近很想拿C#把以前写的坦克大战重写下,来熟悉熟悉C#的基本语法。 程序很简单,跟java代码相比没有多大改动 开发环境 vs2008 实现方法如下 1.在form中添加一个panel,在panel的 ...

    c# http post get

    * *使 用:HttpProc.WebClient client = new HttpProc.WebClient(); client.Encoding = System.Text.Encoding.Default;//默认编码方式,根据需要设置其他类型 client.OpenRead("http://www.baidu.com");//普通get...

    asp.net知识库

    Coalesys PanelBar + R.a.d Treeview +Xml 构建的Asp.net 菜单和权限管理模块 突破屏蔽限制,自己的网站使劲弹新IE窗口 对页面SCROLLING的CSS不能生效原因 .Net 中IE使用WinForm控件的使用心得。 动态加载用户控件的...

    C# WinForm快捷键设置技巧

    1、Alt+*(按钮快捷键) 按钮快捷键也为最常用快捷键,其设置也故为简单。...使用Modifiers可设置组合键,键盘数字区按键的Keys枚举以D打头,而小键盘上的数字以NumPad打头。按下Ctrl与Shift组合键的方

    简单C#坦克大战源码(电脑版本跟手机版本)

    现在毕业了,因为工作中用的是C#,最近很想拿C#把以前写的坦克大战重写下,来熟悉熟悉C#的基本语法。 程序很简单,跟java代码相比没有多大改动 实现方法如下 1.在form中添加一个panel,在panel的 Paint方法中得到...

    Unity游戏开发高级教程 第二部分 [MP4] (14.77G)

    128.UIFrame022 K- d6 D$ ^3 N3 f6 q r) d( e 129.UIFrame032 Y3 A, `! T q. ]5 |1 g' E z4 r1 R+ C 130.UIFrame04 131.UIFrame05 132.UIFrame062 R- |& e z; u 133.UIFrame07 134.UIFrame08 135.UIFrame096 k9 R4 `...

    asp.net面试题

    该文件称作为“代码隐藏”文件,如果用C#创建,该文件将具有“.ascx.cs”扩展名 B.web窗体也是类 C.项目中所有的Web窗体页的代码隐藏文件都被编译成项目动态链接库(.dll)文件 D.以上都不正确 五、下列ASP.NET语句...

    正则表达式

    用以上的正则表式的语法,可以把两位数描述成 / \ d \ d /,把四位数描述成 / \d \ d \ d \ d /.但我们还没有一种方法可以用来描述具有任意多数位的数字或者是一个 字符串.这个串由三个字符以及跟随在字母之后的一位...

    数据库设计工具BDB 最新版 v3.0

    1, 增加E-R图支持 2,增加数据库对象查询功能 3,添加方案右键菜单 4,SQL查询分析功能完善 5,修正了一些bug v3.0浏览: [url]http://www.bainsoft.com/products.html[/url] 贝恩网站: [url]...

    Omron欧姆龙PLC通信库

    C#,Omron欧姆龙PLC通信库 封装欧姆龙通信协议,可以在C#中直接调用 全部代码

    【。net 专业】 面试题

    您使用一个SqlDataAdapter对象和一个SqlCommand对象通过调用一个存储过程从数据库中获取产品数据。您将SqlCommand对象的CommandType属性设置为CommandType.StoredProcedure,并将它的CommandText属性设置为...

Global site tag (gtag.js) - Google Analytics