晚上好,
我正在尝试分析上述数据(edgelist 或 pajek 格式)。首先想到的是带有 igraph 包的 R 项目。但是内存限制(6GB)不会解决问题。128GB 的 PC 能否处理数据?是否有任何替代方案不需要 RAM 中的整个图?
提前致谢。
PS:我找到了几个程序,但我想听听一些专业人士(是的,就是你)对此事的看法。
晚上好,
我正在尝试分析上述数据(edgelist 或 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
包并使用我们的 edgelist 读入文本文件。该命令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)
.