所以,这是一个与这里问的问题非常相似的问题: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$
划分它时,似乎没有任何子列表。
我真的不知道下一步该怎么做,因为我对这些对象没有足够的经验来弄清楚问题可能是什么(或者甚至因为我使用的函数的工作方式,这是否实际上是不可行的)。感谢您的帮助。
发布于 2019-12-11 11:15:58
作为将来的参考,如果其他人调查了类似的问题:
我的问题是,您不能将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
函数单独应用于列表中的每个元素,并将它们放回一个新列表中。
https://stackoverflow.com/questions/59272260
复制