igraph & POSIXct - PullRequest
       19

igraph & POSIXct

0 голосов
/ 11 июля 2019

У меня есть следующие данные

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") выдает ошибку выше. Есть ли обходной путь, аналогичный предложению Бена в комментариях к описанному выше случаю?

1 Ответ

0 голосов
/ 11 июля 2019

Обычно вы можете использовать функцию 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"))

Надеюсь, это поможет.

...