问题标签 [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.
r - 使用提供的节点坐标绘制 ggraph
正如标题所说。我有一个使用创建的图形对象igraph::sample_grg()
,我想使用它来绘制它ggraph
,节点根据节点属性x
和y
. 我试过的:
创建图表:
图表带有x
和y
属性,应该是节点位置
尝试 1
我没有或不想要有向图。
尝试 2
尝试 3
尝试 4
在这个问题之后尝试5 :
我觉得我错过了一些非常明显的东西,任何建议都会非常感激。
r - for-loop 或在多个子图上应用函数
这是这篇文章Calculation based on list elements的后续问题。您可以在这里找到图形g
和数据框的可重现示例Node links across modules with graph 和 dataframe。从 开始,我创建了一个子图,其中包含给定模块中的节点及其边缘数据,例如:modules
g
m1
我想编写一个 for 循环或应用函数来计算所有模块的以下计算。
我的预期输出是每个国家/地区的 az 值的数据框。
r - 使用 purr 通过 tidygraph 将计算映射到不同的网络
该tidygraph
软件包非常适合计算网络统计信息。但是,我有一个具有时间维度的网络,我想计算每个网络的网络统计信息(例如中心性)。(例如,计算每个日期的中心度。)
我想有一种方法可以通过 purrr 和 map 来做到这一点,但我正在努力使用确切的语法。任何帮助在这里表示赞赏。下面的 Repex 示例。
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|! 是顶点数的阶乘。
有没有办法以较低的复杂性做到这一点?
r - 有没有办法使用 tidygraph 激活节点子集?
我很陌生R
。
我正在尝试使用 tidygraph 编写以下代码:
g
我的图表在哪里,activated
是我要添加的属性,seeds
是预定义的向量。我成功地使用了第一部分tidygraph
:
我想知道如何做第二部分。
r - 如何使用 igraph/tidygraph 创建用于更新节点属性的时间循环?
我是新手R
。
我正在尝试创建一个时间循环,如果未通知节点,则节点属性的值会随着时间的推移而更新。到目前为止,我有以下内容:
我正进入(状态
M %*% V(g)$prob[t][v] 中的错误:参数不一致
我想知道如何解决这个问题。
r - 哪个 R 对象可以存储多个网络?
我是新手R
。
我正在尝试创建一个循环,同时在其中创建多个网络。就像是:
其中i-th element
ofG
将存储从i-th draw
. G
知道我需要定义什么样的对象吗?
r - 使用 sfnetworks 和 r 对河网计算进行排序
我在sfnetworks
. 它来源于流网络的线形文件。对于流网中的每条支流,显然都有起止节点来sfnetworks
决定,但线路上也有连接起止节点的节点。为简单起见,我将采用在这个问题中开发的示例网络。
当你在溪流上游移动时,我正在求解一个方程,从河流出口开始。我会尽可能多地为您保存有关该方程式的详细信息,但本质上是:
我正在hx
根据节点属性在每个节点 x 处求解。
N
,dX
,K
和L
都是在我们开始计算之前已知的固定参数。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
。
hx
在该起点计算,然后在沿边的每个节点计算(在此示例中仅显示起点和终点节点),直到到达边 g和边 b合并形成边 a的交界处。在边 a 的那个端点:
在边缘 g和边缘 b的这个交界处,我想更新
h0
以反映在边缘 ahx
的终点计算的结果,因此为 13.03。该值将用于边g和边 b。hx
h0
我现在想对每个子网进行这个计算。我将从边缘 b开始的子网开始。
h0
已更改为 13.03,我们计算边 bhx
上的节点,然后到达边 c和边 d的交界处。在边 b的那个端点:
h0
为边 c和边 d更新,以反映hx
边b的端点 (14.13)hx
为边 d上的所有节点计算,并再次在边 c上计算。- 在边 c的端点处,
h0
更新以反映边 e和边 fhx
的交界处
hx
最终计算边缘 e和边缘 f上的所有节点,使用在边缘 chx
的端点计算的. 这样就完成了该子网的遍历。h0
我们返回边 g来计算
hx
从那里开始的子网。从前面的计算中我们知道,边 a
hx
的端点是 13.03。我们现在想再次反映从边 g开始遍历子网络的这个值。h0
当我们到达边 h和边 i的节点交汇点时,我们再次更新
h0
以反映在边 ghx
的终点处计算的值。
- 这是
h0
用于边 h和边 i的值。我们hx
在边 i上计算,然后在边 h上计算。h0
最后一次更新边缘 j和边缘 k合并以反映在边缘 hhx
的端点处计算的值。
在对边 j和边 k上的所有节点进行最终更新后h0
,hx
计算 , 。
总而言之,h0
当您向上游移动到新边缘时,需要更新以反映hx
直接下游边缘的最大值。必须达到一定的解决顺序,在解决任何边缘(第一条边缘之外)之前,您需要知道该ho
段的 ,这意味着您必须首先解决下面的边缘,以确定hx
要使用的.
我一直在努力想出一个循环/迭代/递归解决方案来解决这个计算,从表面上看,它应该很容易解决。单个引流线程的解决方案很容易手动完成,但是当它扩展到整个网络时,必须解决这些排序问题。当网络中有数千条边时,手动进行这些计算将不是一种选择。
这种类型的计算顺序在许多基本水文分析中非常常见(计算河流顺序、河流大小、计算上游贡献面积等)。
sfnetworks
并且 tidygraph
似乎非常适合进行这种类型的计算,但是在水文网络上的示例应用程序很少(大多数图形分析工具都适用于道路网络,考虑到用户数量的差异,这是完全有意义的)。
我试图让它尽可能地重复,如果需要更多,我会很乐意提供,鉴于问题的概念性更强,这很难做到。
r - 如何从 R 中的 tidygraph 对象列表中操作 tidygraph 对象?
如果我有一个 tidygraph 对象列表,我想根据某些条件删除列表元素。例如,如果我有一个整洁的图形对象列表,如下所示:
查看 的输出,myList
我们可以看到其中一个 tidygraph 对象没有与之关联的边,并且names
列是NA
.
我想知道是否有一种方法可以遍历列表并检查是否有任何 tidygraph 对象没有边缘数据或者NA
(如上面的示例)并从列表中删除该对象。
我知道我可以使用手动删除列表myList <- myList[-2]
。但是当我的列表中有大量 tidygraph 对象时,我正在寻找更通用的解决方案?