igraph 和 POSIXct

igraph & POSIXct

我有以下数据

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") 给出了上面的错误。是否有解决方法,类似于 Ben 在上述案例的评论中提出的建议?

通常您可以使用 match 函数或 %in% 运算符。然而,subcomponent-函数只允许单个查询。为了让它工作,我需要调整你的 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"))

希望对您有所帮助。