RServeCLI 试图理解 C# 中的数据帧

问题描述

我正在尝试让 RServeCLI 客户端使用 RServe 在 C# 中工作。我开始编写示例代码并运行所有内容包括文件、评估函数等。但是,我并不真正了解 Sexp 值是如何传递的。例如,在创建的数据框中,它看起来是一个 20 X 2 矩阵,20 行,2 列(一个用于 x,一个用于 y)。

这是我的 C# 代码

    var x = Enumerable.Range(1,20).ToArray();
    var y = (from a in x select (0.5 * a * a) + 2).ToArray();


    Console.WriteLine("Testing d: ");
    // Build an R data frame
    var d = Sexp.MakeDataFrame();
    d["x"] = Sexp.Make(x);
    d["y"] = Sexp.Make(y);
    s["d"] = d;

    Console.WriteLine("Writing d original");
    Console.WriteLine(d.ToString());
    Console.WriteLine("Writing from s[d]: ");
    Console.WriteLine("");
    Console.WriteLine(s["d$x"].ToString());

    Console.WriteLine("");
    Console.WriteLine("Testing dimensions");

    Sexp dimNum = s.Eval("dim(d)");
    Console.WriteLine("Dimensions: " + dimNum[0].ToString() + " x " + dimNum[1].ToString());

这是输出。请注意,返回的尺寸似乎显示为 0 x 2,而不是预期的 20 x 2。

测试d:写d原件[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20,2.5 4 6.5 10 14.5 20 26.5 34 42.5 52 62.5 74 86.5 100 114.5 130 146.5 164 182.5 202 ] 来自 s[d] 的写作:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

测试尺寸尺寸:0 x 2

谁能解释一下?我将向 R 传递大量数据数组以形成小标题/数据帧,然后在函数中对其进行操作。我只需要更好地了解 C# 中这些类型的格式以及它们是如何传递的。 (旁注,是否有一种方法可以通过 R 与 Rserve 进行交互,以便查看服务器端的情况以便进行调试?)谢谢。

更新: 出于我的目的,我能够使某些事情起作用。这是 C# 中的一些新测试代码

    double[] a = new double[] { 1.1,1.2,1.3,1.4 };
    s["newrow"] = Sexp.Make(a);
    var newrowdim = s.Eval("dim(newrow)");
    var newrowlength = s.Eval("length(newrow)");
    Console.WriteLine("newrow dim: " + newrowdim.ToString() + " newrow length: " + newrowlength.ToString());


    var r = s.Eval("dim(x_data)[1]");
    var c = s.Eval("dim(x_data)[2]");
    Console.WriteLine("");
    Console.WriteLine("Rows: " + r.ToString() + " Cols: " + c.ToString());
    s.Eval("x_data <- rbind(x_data,newrow)");

    var nr = s.Eval("dim(x_data)[1]");
    var nc = s.Eval("dim(x_data)[2]");
    Console.WriteLine("");
    Console.WriteLine("New Rows: " + nr.ToString() + " New Cols: " + nc.ToString());

说明:a 是 C# 中的向量,我在 R 中将其转换为称为 newrow 的向量。我可以看到维度返回为 NULL(从 R 中正确),并且长度是预期的向量长度。

在 R 中,我创建了一个维度为 x_data 的 tibble,以测试将 C# 向量添加到 tibble。我使用 C# 中的命令来执行此操作: s.Eval("x_data

现在,我检查了新更新的 x_data 的尺寸,它和预期的一样,是 2x4(它有添加的行)。

希望这对某人有帮助;它现在对我有用。最初的问题仍然成立。这是代码输出和 R 代码

newrow dim:NULL newrow 长度:4

行:1 列:4

新行:2 个新列:4 个完成

library(tibble)
   
x_data <- as_tibble(matrix(rep(0,4),nrow=1))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)