【问题标题】:How to create an S4 Object using RdotNet如何使用 RdotNet 创建 S4 对象
【发布时间】:2015-12-18 11:58:52
【问题描述】:

使用 R.NET 创建S4 object 时(mirt 包中函数的输出。

engine.Evaluate("library(mirt); data(LSAT6); x=mirt(LSAT6,1)");
S4Object Convertedinput = inputtoCsharp.AsS4();

我需要将 x 的输出(x 的所有插槽)显示到消息框中。

我该怎么做?

因为没有这样的方法:

int[] resp_c = new int  [] {1,1,1,1};
**IntegerVector resp_cR = engine.CreateIntegerVector(resp_c);**
engine.SetSymbol("resp_c", resp_cR);
engine.Evaluate("ff=fscores(x, response.pattern=resp_c)");

上面的事情是针对整数向量完成的。我需要对 R 中的 S4 object 进行相同的模拟。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# r r.net


    【解决方案1】:

    不完全确定我是否理解您的要求,但下面的示例代码应该会有所帮助。它也可从文件 /ReproUsers/Program.cs 中的 An R.NET support github repo 方法 ReproStackOverflow_34355201 获得。供将来参考,written at commit 43a8ec3

    engine.AutoPrint = true;
    //samples taken from ?fscores man page in package mirt
    engine.Evaluate("library(mirt)");
    // 'Science' is a prepackage sample data in mirt; you can use 'engine.CreateDataFrame' in C# to create your own if need be.
    engine.Evaluate("mod <- mirt(Science, 1)");
    engine.Evaluate("class(mod)");
    S4Object modcs = engine.GetSymbol("mod").AsS4();
    IDictionary<string, string> slotTypes = modcs.GetSlotTypes();
    if (slotTypes.Keys.Contains("Fit"))
    {
        GenericVector fit = modcs["Fit"].AsList();
        // should check logLik in fit.Names;
        double logLik = fit["logLik"].AsNumeric()[0];
    }
    engine.Evaluate("tabscores <- fscores(mod, full.scores = FALSE)");
    engine.Evaluate("head(tabscores)");
    engine.Evaluate("class(tabscores)");
    NumericMatrix tabscorescs = engine.GetSymbol("tabscores").AsNumericMatrix();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多