コールバック内で igraph ライブラリを使用して頂点属性の取得/設定を呼び出すと、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 のような高級言語にとって理想的ではありません。