问题标签 [tidygraph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
217 浏览

r - 使用提供的节点坐标绘制 ggraph

正如标题所说。我有一个使用创建的图形对象igraph::sample_grg(),我想使用它来绘制它ggraph,节点根据节点属性xy. 我试过的:

创建图表:

图表带有xy属性,应该是节点位置

尝试 1

我没有或不想要有向图。

尝试 2

尝试 3

尝试 4

在这个问题之后尝试5 :

我觉得我错过了一些非常明显的东西,任何建议都会非常感激。

0 投票
1 回答
50 浏览

r - 按节点分割图

我有一个图表,我想用一个节点来分割它。这是下面介绍的。

我正在使用 R tidygraph。它具有to_split和的变形功能to_components,但我找不到合适的文档来实现它。任何线索都会有所帮助。

在此处输入图像描述

0 投票
1 回答
74 浏览

r - for-loop 或在多个子图上应用函数

这是这篇文章Calculation based on list elements的后续问题。您可以在这里找到图形g和数据框的可重现示例Node links across modules with graph 和 dataframe。从 开始,我创建了一个子图,其中包含给定模块中的节点及其边缘数据,例如:modulesgm1

我想编写一个 for 循环或应用函数来计算所有模块的以下计算。

我的预期输出是每个国家/地区的 az 值的数据框。

0 投票
2 回答
109 浏览

r - 使用 purr 通过 tidygraph 将计算映射到不同的网络

tidygraph软件包非常适合计算网络统计信息。但是,我有一个具有时间维度的网络,我想计算每个网络的网络统计信息(例如中心性)。(例如,计算每个日期的中心度。)

我想有一种方法可以通过 purrr 和 map 来做到这一点,但我正在努力使用确切的语法。任何帮助在这里表示赞赏。下面的 Repex 示例。

0 投票
2 回答
182 浏览

r - 降低算法的复杂性,从满足给定约束的无向图构造有向图 (DAG)

我有一个包含 4,000 多个节点的网络,并且我有一个边列表(节点对之间的连接)。所有节点都应该收敛到一个中心点,但我无法对节点进行排序,因为它们没有以重新排序可行的方式编号或标记。

我需要什么?:根据所附的小例子,我需要所有节点都指向节点 F(F 可以从所有节点到达),这样无向图就变成了有向图(DAG),并且作为一个限制,只有每个节点对之间的一条边。当且仅当要删除循环(例如 A -> B,B <- A)时,我才被允许删除边缘。我也不能添加边,因为这是一个真实的网络,我不能在不存在的地方创建连接。

我所拥有的是:

这是我提出的排序过程,以便边缘列表成为 DAG:

警告:当节点的数量达到一定大小(比如说 90)时,该算法会生成使图形非循环的循环,因此我要做的另一个过程是在 Python 中应用一个函数,调用该函数feedback_arc_set来删除将使图是一个 DAG。

为简单起见,我没有包含删除这些循环的必要代码,因为在这个特定示例中没有生成循环。

reprex 包于 2021-07-07 创建 (v2.0.0 )

那么问题出在哪里?:节点数大于2000时算法的复杂度

如果我尝试使用 2000 个节点来执行此操作,则算法永远不会结束。我让它运行了 24 小时,但没有完成。事实上,我没有找到一种方法来知道它是否有效。在这个地方我发现 {igraph} 的函数在all_simple_paths后台使用了 DFS,但是复杂度是 O (|V|!) 其中 |V| 是顶点数,|V|! 是顶点数的阶乘。

有没有办法以较低的复杂性做到这一点?

0 投票
1 回答
64 浏览

r - 有没有办法使用 tidygraph 激活节点子集?

我很陌生R

我正在尝试使用 tidygraph 编写以下代码:

g我的图表在哪里,activated是我要添加的属性,seeds是预定义的向量。我成功地使用了第一部分tidygraph

我想知道如何做第二部分。

0 投票
2 回答
64 浏览

r - 如何使用 igraph/tidygraph 创建用于更新节点属性的时间循环?

我是新手R

我正在尝试创建一个时间循环,如果未通知节点,则节点属性的值会随着时间的推移而更新。到目前为止,我有以下内容:

我正进入(状态

M %*% V(g)$prob[t][v] 中的错误:参数不一致

我想知道如何解决这个问题。

0 投票
1 回答
42 浏览

r - 哪个 R 对象可以存储多个网络?

我是新手R

我正在尝试创建一个循环,同时在其中创建多个网络。就像是:

其中i-th elementofG将存储从i-th draw. G知道我需要定义什么样的对象吗?

0 投票
0 回答
85 浏览

r - 使用 sfnetworks 和 r 对河网计算进行排序

我在sfnetworks. 它来源于流网络的线形文件。对于流网中的每条支流,显然都有起止节点来sfnetworks决定,但线路上也有连接起止节点的节点。为简单起见,我将采用在这个问题中开发的示例网络。

在此处输入图像描述

当你在溪流上游移动时,我正在求解一个方程,从河流出口开始。我会尽可能多地为您保存有关该方程式的详细信息,但本质上是:

我正在hx根据节点属性在每个节点 x 处求解。

  • N, dX,KL都是在我们开始计算之前已知的固定参数。

  • N,K对于所有节点都是固定的,它们永远不会改变。

  • dX是节点特定属性。

  • h0并且L是边缘特定的属性(它们对于边缘上的所有节点都是相同的)

  • h0由用户在计算开始时定义,但随着您在上游遍历网络时发生变化,当新边收敛时在末端节点发生变化。

  • h0最初设置为 10,N = 0.5,K = 1500。

  • 为了简单起见,我们将说每条边长 100m。

  • dX只是反映每个边缘的距离。每条边上的下游节点,dX = 0。每条边上的上游节点,dX = 100

  • L反映了一个通道上游的总距离edge,加上那个的总长度edge

我想在边缘 a的下游节点开始计算h0 = 10

  1. hx在该起点计算,然后在沿边的每个节点计算(在此示例中仅显示起点和终点节点),直到到达边 g边 b合并形成边 a的交界处。

  2. 在边 a 的那个端点:

  1. 边缘 g边缘 b的这个交界处,我想更新h0以反映在边缘 ahx的终点计算的结果,因此为 13.03。该值将用于边g边 bhxh0

  2. 我现在想对每个子网进行这个计算。我将从边缘 b开始的子网开始。h0已更改为 13.03,我们计算边 bhx上的节点,然后到达边 c边 d的交界处。

  3. 在边 b的那个端点:

  1. h0边 c边 d更新,以反映hxb的端点 (14.13)
  2. hx为边 d上的所有节点计算,并再次在边 c上计算。
  3. 边 c的端点处,h0更新以反映边 e边 fhx的交界处
  1. hx最终计算边缘 e边缘 f上的所有节点,使用在边缘 chx的端点计算的. 这样就完成了该子网的遍历。h0

  2. 我们返回边 g来计算hx从那里开始的子网。

  3. 从前面的计算中我们知道,边 ahx的端点是 13.03。我们现在想再次反映从边 g开始遍历子网络的这个值。h0

  4. 当我们到达边 h边 i的节点交汇点时,我们再次更新h0以反映在边 ghx的终点处计算的值。

  1. 这是h0用于边 h边 i的值。我们hx边 i上计算,然后在边 h上计算。h0最后一次更新边缘 j边缘 k合并以反映在边缘 hhx的端点处计算的值。

在对边 j边 k上的所有节点进行最终更新后h0hx计算 , 。

总而言之,h0当您向上游移动到新边缘时,需要更新以反映hx直接下游边缘的最大值。必须达到一定的解决顺序,在解决任何边缘(第一条边缘之外)之前,您需要知道该ho段的 ,这意味着您必须首先解决下面的边缘,以确定hx要使用的.

我一直在努力想出一个循环/迭代/递归解决方案来解决这个计算,从表面上看,它应该很容易解决。单个引流线程的解决方案很容易手动完成,但是当它扩展到整个网络时,必须解决这些排序问题。当网络中有数千条边时,手动进行这些计算将不是一种选择。

这种类型的计算顺序在许多基本水文分析中非常常见(计算河流顺序、河流大小、计算上游贡献面积等)。 sfnetworks并且 tidygraph似乎非常适合进行这种类型的计算,但是在水文网络上的示例应用程序很少(大多数图形分析工具都适用于道路网络,考虑到用户数量的差异,这是完全有意义的)。

我试图让它尽可能地重复,如果需要更多,我会很乐意提供,鉴于问题的概念性更强,这很难做到。

0 投票
2 回答
124 浏览

r - 如何从 R 中的 tidygraph 对象列表中操作 tidygraph 对象?

如果我有一个 tidygraph 对象列表,我想根据某些条件删除列表元素。例如,如果我有一个整洁的图形对象列表,如下所示:

查看 的输出,myList我们可以看到其中一个 tidygraph 对象没有与之关联的边,并且names列是NA.

我想知道是否有一种方法可以遍历列表并检查是否有任何 tidygraph 对象没有边缘数据或者NA(如上面的示例)并从列表中删除该对象。

我知道我可以使用手动删除列表myList <- myList[-2]。但是当我的列表中有大量 tidygraph 对象时,我正在寻找更通用的解决方案?