gpt4 book ai didi

r - 在 R 中拆分图形网络字符串

转载 作者:行者123 更新时间:2023-12-04 12:29:22 25 4
gpt4 key购买 nike

我有以下来自贝叶斯网络学习算法的字符串(例如来自 bnlearndeal 包):

[1] "[wst|af:bq:rloss_s:pre3][af|bq][d|wst:af:con:rloss_s][bq|con][con|af][rloss_s|af:con:pre3][pre3|af:con]"

字符串定义了变量之间的连接以及连接的方向。括号中每一项的第一个变量 ([...]) 表示一个节点,| 后面的所有变量表示与第一个节点方向相连的节点。这些变量由 : 分隔。

我想将字符串转换成一个 data.frame 来代表每个变量之间的联系。它应该看起来像这样:

> data.frame(string_table)
from to
1 af wst
2 bq wst
3 rloss_s wst
4 pre3 wst
5 bq af
6 wst d
7 af d
8 con d
9 rloss_s d
10 con bq
11 af con
12 af rloss_s
13 con rloss_s
14 pre3 rloss_s
15 af pre3
16 con pre3

最佳答案

我会在这里使用图形工具而不是字符串操作。下面举例说明

library(bnlearn)

d = clgaussian.test
m = hc(d)

所以你有字符串/模型

bnlearn::modelstring(m)
#[1] "[A][B][C][H][D|A:H][F|B:C][E|B:D][G|A:D:E:F]"

使用bnlearn循环获取每个节点的父节点

stack(sapply(nodes(m), function(x) parents(m, x)))

或者在邻接矩阵上使用igraph得到边列表

library(igraph)
as_edgelist(graph_from_adjacency_matrix(amat(m)))

编辑:

似乎 bnlearn 有提取边缘的功能

arcs(m)

关于r - 在 R 中拆分图形网络字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43726088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com