たとえば、各頂点について、男性に向かって外側に向けられたネクタイの割合をどのように計算すればよいでしょうか?
g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA
たとえば、各頂点について、男性に向かって外側に向けられたネクタイの割合をどのように計算すればよいでしょうか?
g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA
考えられる(必ずしも最適ではない)解決策は次のとおりです(これは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
、頂点の次数で要素ごとに除算して比率を取得します。