[英]R / igraph : getting vertex neighbors list within a depth-first-search callback causes a R to close. Any suggestion?
[英]R / igraph : any call to get/set vertex attribute within a depth-first-search callback causes a segfault
我發現在回調中使用igraph庫對get / set vertex屬性的任何調用都會導致R中出現段錯誤。例如,一段代碼中的瑣碎回調:
dfsCallBack <- function(graph, data, extra) {
cat("in:", paste(collapse=", ", data), "\n")
distFromRoot <- data[2]
vertexID <- data[1]
set.vertex.attribute(graph, 0, name = 'color', value = 'blue')
FALSE
}
graph.dfs(g, 1, in.callback = dfsCallBack)
產生此錯誤:
graph.dfs(g, 1, in.callback = dfsCallBack)
in: 0, 0
*** caught segfault ***
address 0x0, cause 'memory not mapped'
Traceback:
1: .Call("R_igraph_dfs", graph, root, neimode, unreachable, as.logical(order), as.logical(order.out), as.logical(father), as.logical(dist), in.callback, out.callback, extra, rho, PACKAGE = "igraph")
2: graph.dfs(g, 1, in.callback = dfsCallBack)
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
Selection:
怎么了 另外,igraph在處理這些錯誤時可能應該更健壯,因為R之類的崩潰對於R之類的高級語言而言並不理想。
有兩點。
如果您說set.vertex.attribute(graph, ...)
,則實際上不會更改graph
,但是會返回具有更新屬性的新副本。 R對象(幾乎總是)是不可變的,您不能更改它們,只能基於它們創建新對象。
set.vertex.attribute(graph, 0, name = 'color', value = 'blue')
是錯誤的,因為頂點ID從1開始,所以0無效。 這應該報告為錯誤,並且已經在我們的開發樹中修復。
這不是錯誤,而是錯誤。 igraph錯誤不會使R崩潰,它們只會給出錯誤消息。 由於igraph代碼和R在同一線程中運行,igraph錯誤可能會使R崩潰,並且除了避免錯誤外,我們對此無能為力。
我建議使用igraph.dfs
的結果來igraph.dfs
地設置屬性。 當然,您可以使用回調來記錄信息或終止DFS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.