0

背景

我正在使用 RDotNet 运行一个 R 脚本,该脚本使用 deldir 包执行 voronoi 镶嵌。在 R: 之后tiles = tile.list(voro),我希望tiles[[i]][c("x","y")]将每个图块的 R: 提取i到 C#:List<Tuple<double,double>>中。

第一期

我可以使用将 R:tiles对象提取到 C#-world 中,var tiles = engine.Evaluate("tiles").AsVector().ToList();但我很难理解如何使用 RDotNet 从此时提取每个图块的 x、y 值:

在此处输入图像描述

我不知道如何迭代这个对象来提取我想要的 x、y 值。

第 2 期

或者,我尝试在 R 中创建一个新的更简单的对象,即values尝试提取一个字符串并从中解析值。到目前为止,我只为其中一个点创建了这个对象:

R:例如

values <- tiles[[1]][c("x","y")]

C#:例如

var xvalues = engine.Evaluate("values[\"x\"]").AsCharacter();
var yvalues = engine.Evaluate("values[\"y\"]").AsCharacter();
// Some boring code that parses the strings, casts to double and populates the Tuple

但是,我一次只能提取一个字符串,并且必须拆分字符串以获得我想要的值。这似乎不是我应该做的事情。 在此处输入图像描述

问题

如何将每个图块的 x,y 坐标从 R: 提取tiles[[i]][c("x","y")]到 C#:中List<Tuple<double,double>>

4

1 回答 1

1

如果我正确地得到了你想要的东西,我认为你会追求类似以下的东西。我测试的完整代码提交给我刚刚为 SO 查询设置的 git 存储库。我已经针对 1.5.5 的 NuGet 包进行了测试;以后的读者请注意,R.NET 的后续版本可能允许您使用其他惯用语。

var res = new List<List<Tuple<double, double>>>();
// w is the result of tile.list as per the sample in ?tile.list
var n = engine.Evaluate("length(w)").AsInteger()[0];
for (int i = 1; i <= n; i++)
{
    var x = engine.Evaluate("w[[" + i + "]]$x").AsNumeric().ToArray();
    var y = engine.Evaluate("w[[" + i + "]]$y").AsNumeric().ToArray();
    var t = x.Zip(y, (first, second) => Tuple.Create(first, second)).ToList();
    res.Add(t);
}
于 2014-01-16T00:00:07.140 回答