2

たとえば、各頂点について、男性に向かって外側に向けられたネクタイの割合をどのように計算すればよいでしょうか?

g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA
4

1 に答える 1

3

考えられる(必ずしも最適ではない)解決策は次のとおりです(これは1行ですが、読みやすくするために分解します)。

unlist(lapply(get.adjlist(g, mode="out"),
       function (neis) {
           sum(V(g)[neis]$male, na.rm=T)
       }
)) / degree(g, mode="out")

それでは、それを細かく分割してみましょう。まず、を使用してグラフの隣接リストを取得しget.adjlist(g, mode="out")ます。これにより、ベクトルのリストが得られます。各ベクトルには、頂点のアウトネイバーが含まれています。次に、を使用してこのリストの各ベクトルに関数を適用しますlapply。適用される機能は次のとおりです。

function (neis) {
    sum(V(g)[neis]$male, na.rm=T)
}

この関数は、ノードの隣接ノードを取り込んで、neisそれを使用して頂点セット全体から頂点のサブセットを選択するだけV(g)です。次に、maleこの頂点サブセットの属性が取得され、値が合計NAされて、その場で値が削除されます。基本的に、この関数はの男性の数を示しますneis

ここで、元の式に戻って、を使用してこの関数をグラフの隣接リストに適用し、lapply数値のリストを取得しました。各数値には、特定の頂点の隣接する男性の数が含まれています。を使用してこのリストを単一のRベクトルに変換しunlist、頂点の次数で要素ごとに除算して比率を取得します。

于 2011-10-04T21:11:26.113 に答える