1

我有一个 MySQL 表pedigree,将我所有的互连亲子数据存储为 2 个邻接列表:

谱系表

org_id INT UNSIGNED NOT NULL PRIMARY KEY,
dam_id INT UNSIGNED,
sire_id INT UNSIGNED,
FOREIGN KEY (org_id) REFERENCES organisms(org_id)
FOREIGN KEY (dam_id) REFERENCES organisms(org_id),
FOREIGN KEY (sire_id) REFERENCES organisms(org_id)
  • 任何org_id人都可能有孩子,也可能没有孩子。儿童人数不限。
  • org_id表中的每个pedigree都需要至少有一个 dam_id 或一个sire_id
  • 如果一个org_id没有父母,它不会在血统表中列出,除非是父亲或母亲
  • 一个org_id可能有dam_id==sire_id

样本数据

Org Dam Sire
23, 42, 57
26, 25, 25
27, 43, 43
28, 44, 44
30, 25, 25
31, 45, 25
32, 45, 45
33, 31, 32
34, 28, 59
35, 27, 28
36, 28, 28
39, 38, 34
41, 27, 24

我想使用 R 的igraph包(除非有更合适的东西)来显示我的谱系的有向 DAG,其中祖先节点出现在子节点之上。我不清楚 igraph 到底需要做什么。我想我需要从我的邻接列表中生成一个邻接矩阵,但我不知道如何有效地做到这一点。

想法?

4

1 回答 1

1

考虑使用边缘列表。两列矩阵,每条边作为矩阵中的一行。igraph 也会从边缘列表中的值中提取节点的名称。

g <- graph.edgelist(el)

如果您出于某种原因需要邻接矩阵

adj.mat <- get.adjacency(g)
于 2011-06-16T18:58:57.283 回答