0

深さ 1.5 の膨大な数の自己中心的なネットワークのローカル クラスタリング係数を計算する必要があります。すべてのファイルは ego-s にちなんで名付けられた edgelist であり、「edgelist」フォルダーに保存されます。バッチインポートするコードは次のとおりです。

datanames <- as.character(lapply(list.files("./edgelists"), FUN = function(x) strsplit(x, split="\\.")[[1]][1]))
dataset <- lapply(datanames, function(x) list(assign(x, read.table(paste("./edgelists/", x, ".csv", sep=""), header=TRUE, sep=","))))
graphs <- lapply(dataset, function(dataset) graph.data.frame(dataset, directed=F, vertices=NULL))

ここで、'datanames' に chr として名前が格納されている自我についてのみ推移性を計算する必要があります。

この変数をvidsパラメーターの値として使用できないようです。1)直接、2)この関数で数値、倍精度、整数に変換した後も使用できません

trans <- lapply(graphs, function(graph) transitivity(graph, type = "local", vids=datanames))

最初のケースでは次のエラーが返されるためです。

1) Error in as.igraph.vs(graph, vids) : Invalid vertex names 

数値型に変換した後、次のようになります。

2)  Error in .Call("R_igraph_transitivity_local_undirected", graph, vids,  : 
  At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id 

どうすれば自分のタスクを達成できますか?

4

1 に答える 1

0

これが、私の同僚であるBenjamin Lindによって提供された解決策です。

all_files <- list.files("./edgelists") # reading file names
datanames <- strsplit(all_files, split = "\\.") # removing file extension
datanames <- sapply(datanames, "[[", 1) # getting names of egos

# Helper function to load data
fun1 <- function(x){
        pathname <- paste("./edgelists/", x, ".csv", sep="")
        xdf <- read.table(pathname, header = TRUE, sep=",")
        return(xdf)
}
dataset <- lapply(datanames, fun1)
# Converting data to graph objects
graphs <- lapply(dataset, graph.data.frame, directed = FALSE)
# Helper function to get vertices names of ego
egovidfun <- function(vname, vgraph){
        return(which(V(vgraph)$name == vname))
}
# Transitivity function for selected egos
newtransfun <- function(vid, vgraph){
        return(transitivity(vgraph, type = "local", vids = vid)[1])
}
# Getting vertices for egos
egovids <- egovidfun(datanames, graphs)
# Calculating transitivity for selected egos
trans <- newtransfun(egovids, graphs)`
于 2015-01-29T09:18:10.583 に答える