问题描述
我正在尝试让 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 (将#修改为@)