2

'Betweenness' 関数 betweenness(g,weights=NULL,directed = FALSE) を使用する場合、グラフに weight 属性がある場合、weights=NULL と記述しても、関数は weight 属性を使用して中間性を計算します。しかし、重み属性なしで中間性を計算したいのです。だから、この機能はおかしいと思います。weights=NULL を記述したときに、まだ weight 属性を使用するのはなぜですか?

function (graph, v = V(graph), directed = TRUE, weights = NULL, 
    nobigint = TRUE, normalized = FALSE) 
{
    if (!is.igraph(graph)) {
        stop("Not a graph object")
    }
    v <- as.igraph.vs(graph, v)
    if (is.null(weights) && "weight" %in% list.edge.attributes(graph)) {
        weights <- E(graph)$weight
    }
    if (!is.null(weights) && any(!is.na(weights))) {
        weights <- as.numeric(weights)
    }
    else {
        weights <- NULL
    }
    on.exit(.Call("R_igraph_finalizer", PACKAGE = "igraph"))
    res <- .Call("R_igraph_betweenness", graph, v - 1, as.logical(directed), 
        weights, as.logical(nobigint), PACKAGE = "igraph")
    if (normalized) {
        vc <- vcount(graph)
        res <- 2 * res/(vc * vc - 3 * vc + 2)
    }
    if (getIgraphOpt("add.vertex.names") && is.named(graph)) {
        names(res) <- V(graph)$name[v]
    }
    res
}
4

1 に答える 1

6

重みオプションは、重みを無視して使用しないということではありません。これは、ユーザーが独自の重みベクトルを提供するオプションを提供することです。

ドキュメントから

weight - 加重中間性を計算するためのオプションの正の加重ベクトル。グラフに重みエッジ属性がある場合、これがデフォルトで使用されます。

したがってweights=NULL、関数がE(g)$weightデフォルトで を使用する場合。

これを自分で行うには、重みを削除するか、重みを 1 に設定します。

E(g)$weight <- 1
于 2013-04-21T09:58:12.487 に答える