c# - 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 4 6.52 6 4 182 182 1来自 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 传递大量数据数组以形成 tibbles / dataframes,然后在函数中对其进行操作。我只需要更好地理解 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 的尺寸为 1x4 的 tibble,以测试将 C# 向量添加到 tibble。我使用 C# 中的命令来执行此操作: s.Eval("x_data <- rbind(x_data, newrow)");
现在,我检查了新更新的 x_data 的尺寸,它符合预期,2x4(它有添加的行)。
希望这对某人有帮助;它现在对我有用。原来的问题仍然存在。这是代码的输出和 R 代码。
新行暗淡:NULL 新行长度:4
行:1 列:4
新行:2 新列:4 完成
library(tibble)
x_data <- as_tibble(matrix(rep(0, 4), nrow=1))
解决方案
推荐阅读
- azure - Azure 容器服务上的 Kub 集群路由到 404,而我的 docker 映像在我的本地工作正常?
- docker - 如何为具有客户端角色而非服务器角色的 Kubernetes Pod 使用 SSL 证书
- r - 有效地拆分数据和拟合分布
- netlogo - Netlogo如何添加图例?
- highcharts - Highcharts - 缩放 xAxis 并沿轴平移
- php - 如何在 Laravel 5.6 中显示多对多关系的最后一条记录
- .htaccess - Gzip 压缩不适用于 javascript 文件
- android - 如何从firebase获取数据和选择数据
- javascript - 删除插件 editor.md 的行号
- javascript - 在javascript中测试可能不存在的多个值