计算改变 R 中大图中的密度
Calculate alters density in a large graph in R
我正在与 R 中的一个大型社交网络合作(560120 个关系)。我想计算节点的局部密度,以及它们的分身密度。
我使用包 igraph
.
通过以下代码片段实现了前者
g <- graph_from_data_frame(edgelist, directed = FALSE)
egonet_list <- make_ego_graph(g)
dat <- data.frame(
id = names(V(g),
egonet_density = lapply(egonet_list, graph.density) %>% unlist()
)
然而,当我尝试计算自我改变的网络时,我 运行 遇到了记忆问题。我尝试 运行 以下内容:
alter_list <- make_ego_graph(g, order = 2, mindist = 1)
它确实适用于较小的图形,但在我的网络设置中,它会耗尽我所有的 RAM (>110GB) 并崩溃。
有没有人建议如何以内存友好的方式解决这个问题?
您可以一次计算一个节点的局部密度,而无需保存更改图。
library(igraph)
library(purrr)
make_ego_graph(g, order = 2, nodes = 1, mindist = 1)
V(g) %>%
map_dbl(~ make_ego_graph(g, order = 2, nodes = .x, mindist = 1)[[1]] %>%
graph.density())
您可以使用 map 中的代码并编写一个名为 get_alter_density()
的函数,如果您愿意,可以使用 lapply
。
我正在与 R 中的一个大型社交网络合作(560120 个关系)。我想计算节点的局部密度,以及它们的分身密度。
我使用包 igraph
.
g <- graph_from_data_frame(edgelist, directed = FALSE)
egonet_list <- make_ego_graph(g)
dat <- data.frame(
id = names(V(g),
egonet_density = lapply(egonet_list, graph.density) %>% unlist()
)
然而,当我尝试计算自我改变的网络时,我 运行 遇到了记忆问题。我尝试 运行 以下内容:
alter_list <- make_ego_graph(g, order = 2, mindist = 1)
它确实适用于较小的图形,但在我的网络设置中,它会耗尽我所有的 RAM (>110GB) 并崩溃。
有没有人建议如何以内存友好的方式解决这个问题?
您可以一次计算一个节点的局部密度,而无需保存更改图。
library(igraph)
library(purrr)
make_ego_graph(g, order = 2, nodes = 1, mindist = 1)
V(g) %>%
map_dbl(~ make_ego_graph(g, order = 2, nodes = .x, mindist = 1)[[1]] %>%
graph.density())
您可以使用 map 中的代码并编写一个名为 get_alter_density()
的函数,如果您愿意,可以使用 lapply
。