こんばんは、
前述のデータ(エッジリストまたはpajek形式)を分析しようとしています。最初に考えたのは、igraphパッケージを使用したRプロジェクトでした。しかし、メモリ制限(6GB)ではうまくいきません。128GBのPCでデータを処理できますか?RAMにグラフ全体を必要としない代替手段はありますか?
前もって感謝します。
PS:私はいくつかのプログラムを見つけましたが、この問題についていくつかのプロ(ええ、それはあなたです)の意見を聞きたいです。
こんばんは、
前述のデータ(エッジリストまたはpajek形式)を分析しようとしています。最初に考えたのは、igraphパッケージを使用したRプロジェクトでした。しかし、メモリ制限(6GB)ではうまくいきません。128GBのPCでデータを処理できますか?RAMにグラフ全体を必要としない代替手段はありますか?
前もって感謝します。
PS:私はいくつかのプログラムを見つけましたが、この問題についていくつかのプロ(ええ、それはあなたです)の意見を聞きたいです。
次数の分布のみが必要な場合は、グラフパッケージはまったく必要ない可能性があります。私はbigtablulateパッケージをお勧めします
foreach
詳細については、彼らのウェブサイトをチェックしてください。このアプローチの簡単な例を示すために、最初に、100万ノードのうち100万エッジを含むエッジリストを使用した例を作成しましょう。
set.seed(1)
N <- 1e6
M <- 1e6
edgelist <- cbind(sample(1:N,M,replace=TRUE),
sample(1:N,M,replace=TRUE))
colnames(edgelist) <- c("sender","receiver")
write.table(edgelist,file="edgelist-small.csv",sep=",",
row.names=FALSE,col.names=FALSE)
次に、このファイルを10回連結して、例を少し大きくします。
system("
for i in $(seq 1 10)
do
cat edgelist-small.csv >> edgelist.csv
done")
次に、bigtabulate
パッケージをロードし、エッジリストを使用してテキストファイルを読み込みます。このコマンドread.big.matrix()
は、Rでファイルバックアップオブジェクトを作成します。
library(bigtabulate)
x <- read.big.matrix("edgelist.csv", header = FALSE,
type = "integer",sep = ",",
backingfile = "edgelist.bin",
descriptor = "edgelist.desc")
nrow(x) # 1e7 as expected
bigtable()
最初の列を使用して、アウトディグリーを計算できます。
outdegree <- bigtable(x,1)
head(outdegree)
テーブルが期待どおりに機能していることを確認するための迅速な健全性チェック:
# Check table worked as expected for first "node"
j <- as.numeric(names(outdegree[1])) # get name of first node
all.equal(as.numeric(outdegree[1]), # outdegree's answer
sum(x[,1]==j)) # manual outdegree count
学位を取得するには、を実行しますbigtable(x,2)
。