我有以下数据
library(data.table); library(igraph)
t <- data.table(a=seq(ISOdate(2019,1,1), ISOdate(2019,7,1), "months"),
b=seq(ISOdate(2019,1,2), ISOdate(2019,7,2), "months"))
g <- graph_from_edgelist(as.matrix(t[,c("a","b")]))并希望应用subcomponent(g,ISOdate(2019,1,1),"out"),但获得以下错误:
At structural_properties.c:1249 : subcomponent failed, Invalid vertex id有人知道这个问题的解决办法吗?
附加并发症
当我有一个额外的变量时,这个问题是复杂的。
start <- seq(ISOdate(2019,1,1), ISOdate(2019,7,1), "months")[c(1,3,5,7)]它包含不同的起始顶点。同样,subcomponent(g,start,"out")给出了上面的错误。是否有一个解决办法,类似于本的建议,在对上述情况的评论?
发布于 2019-07-11 09:56:50
通常,您可以使用match函数或%in%运算符。但是,subcomponent-function只允许单个查询。为了使其工作,我需要调整您的start矢量,因为时区是在那里添加的,但没有添加到原始图中:
start <- gsub(" GMT", "", start)因此,要回答您的问题(基于上面的注释):您可以使用adjacent_vertices函数,它同时查询多个顶点。
adjacent_vertices(g, V(g)$name %in% start, mode = "out")这里的缺点是,只报告目标顶点,而不报告起始顶点。我不知道有一个现有的函数可以纠正这一点。因此,为了获得起始点和目标顶点,您可以编写自己的函数:
lapply(1:length(start), function(x) subcomponent(g, V(g)$name == start[x], "out"))我希望这能帮到你。
https://stackoverflow.com/questions/56983943
复制相似问题