将igraph.vs对象列表转换为数据框(来自all_simple_paths)

时间:2019-12-10 17:05:36

标签: r dataframe igraph

因此,这是一个与此处提出的问题极为相似的问题:Turning an igraph.vs into a data frame,但是,在将解决方案应用于我自己的情况时,我遇到了问题。

与该问题中的个人类似,我使用了R igraph函数all_simple_paths()创建了igraph.vs对象的列表。

然后增加了复杂性,我以以下方式在此列表中添加了更多路径:

for (i in 1:length(starts)){

  smple_path_n = all_simple_paths(info_igraph,
                                starts,
                                to = end)

  all_paths = c(all_paths, smple_path_n)

}

因此,我将列表合并为一个整体的较大列表。该对象列表如下所示:

[[1]]
+ 3/? vertices, named, from 31c3f54 (deleted):
[1] hsa:1147 hsa:4790 hsa:6348

[[2]]
+ 3/? vertices, named, from d0aa080 (deleted):
[1] hsa:1147 hsa:4790 hsa:6348

[[3]]
+ 3/? vertices, named, from 60b5da5 (deleted):
[1] hsa:1326 hsa:4790 hsa:6348

我现在遇到的问题是我想将这些对象转换为看起来像这样的数据框或矩阵:

         hsa:1147 hsa:1326 hsa:4790 hsa:6348                
Pathway1    1    0    1    1
Pathway2    1    0    1    1 
Pathway3    0    1    1    1

所有这些都与此处开头链接的问题非常相似,但是无论出于何种原因,all_simple_paths()函数的输出似乎与all_shortest_paths()函数的行为不同。因此,该问题中建议的解决方案似乎对我不起作用。

在原始列表(或组合的整体列表)上使用as_ids时,出现以下错误:

Error in UseMethod("as_ids") : 
no applicable method for 'as_ids' applied to an object of class "list"

类似地,该列表似乎没有任何“列”,因为当尝试用all_paths$对其进行划分时,似乎没有任何子列表。

我真的不知道从这里去哪里,因为我对这些对象没有足够的经验来弄清楚问题可能是什么(或者甚至因为这种方式实际上不可行)我正在使用的功能有效)。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

以备将来参考,以防万一其他人调查与此类似的问题:

我的问题是,您不能将as_ids函数应用于任何一组简单路径,并且一次只能应用于一个。在事后看来,这似乎很明显,但是由于这意味着它不能直接应用于igraph.vs对象的列表,而这实际上是all_simple_paths()函数返回的结果,因此感到有些沮丧。

使用for循环,我的解决方案感觉不太优雅,但似乎可以正常工作:

dir_paths_part = list()

for (nsmples in 1:length(smple_path_n)){

  curr_smple = as_ids(smple_path_n[[nsmples]])

  dir_paths_part[[nsmples]] = curr_smple

}

基本上,我需要将as_ids函数分别应用于列表的每个元素,并将它们放回到新列表中。