2014-01-24 1 views
2

Я пытаюсь написать скрипт в R, чтобы идентифицировать элементы (ребра и вершины), принадлежащие циклам графика.R/igraph: получение списка соседей вершин в обратном вызове глубины поиска приводит к закрытию R. Любое предложение?

Я использую функцию обратного вызова в файле graph.dfs (igraph R). Я не хочу изменять график, просто хочу построить новый список посещенных вершин (и обновлять его) каждый раз, когда алгоритм dfs посещает вершину. Проблема в том, что программа R закрывается, если я запускаю следующий код. Возможно, что-то не так - любое предложение/помощь?

#create a simple graph with 4 nodes and 1 cycle 
gIncidenceMatrix <- matrix (c(0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0), nrow=4, ncol=4, byrow=T) 

g <- graph.adjacency(gIncidenceMatrix, mode = "undirected") 

f.cycleDetection <- function(g, data, extra) { 

vId <- data[1] 
nVertices <- neighbors(g, vId+1, mode = 1)  #vId + 1 is to avoid having index 0 (any suggestion?) 

FALSE 
} 

graph.dfs(g, root=1, neimode = "all", unreachable = TRUE, order = FALSE, order.out = FALSE, father = FALSE, dist = FALSE, in.callback = f.cycleDetection, out.callback = NULL, extra = NULL, rho = parent.frame()) 

Я нашел следующую нить (R/igraph : any call to get/set vertex attribute within a depth-first-search callback causes a segfault), но это выглядит его ответ сосредоточен в изменении свойств элементов графа внутри функции обратного вызова, которая несколько отличается от того, что я пытаюсь сделать.

Заранее спасибо за поддержку, JP

ответ

2

На самом деле, это хуже, чем то, что в упомянутой вопрос. Кажется, что вы не можете даже вызвать функцию igraph из обратного вызова. Решение состоит в том, чтобы запросить всех соседей перед DFS, используя get.adjlist, а затем использовать их в DFS.

Я создал отчет об ошибке для этого: https://github.com/igraph/igraph/issues/571

+0

благодарит Габора за предложение. Это решило проблему. – jpl

 Смежные вопросы

  • Нет связанных вопросов^_^