r-社会图分析.60GB和1亿个节点



晚上好,

我正在尝试分析前面提到的数据(边缘列表或pajek格式)。首先想到的是带有igraph包的R项目。但是内存限制(6GB)不会起作用。128GB的电脑能处理数据吗?有没有什么替代方案不需要RAM中的完整图形?

提前谢谢。

p.S.:我已经找到了几个节目,但我想听听一些专业人士(是的,就是你)对此事的看法。

如果你只想要学位分布,你可能根本不需要图形包。我推荐bigtableulate包,这样

  1. 您的R对象是文件备份的,因此您不受RAM的限制
  2. 可以使用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。

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)

相关内容

  • 没有找到相关文章

最新更新