我在R中有一个网络图:
set.seed(123)
library(igraph)
# Define a vector of names
names <- c("John", "Alex", "Jason", "Matt", "Tim", "Luke", "Shawn", "Henry", "Steven", "Scott", "Adam", "Jeff", "Connor", "Peter", "Andrew", "Dave", "Daniel", "Benjamin", "Joseph", "Martin")
# Create an empty graph with 20 nodes
g <- make_empty_graph(20)
# Add random edges between nodes to represent friendships
set.seed(123) # for reproducibility
num_edges <- 40
edge_list <- sample(names, size = num_edges * 2, replace = TRUE)
edge_list <- matrix(edge_list, ncol = 2, byrow = TRUE)
g <- graph_from_edgelist(edge_list, directed = FALSE)
# Set the node names to be the names vector
V(g)$name <- names
# Plot the graph
plot(g, vertex.label.cex = 0.7, vertex.label.color = "black", vertex.label.dist = 2)
**我的问题:**假设我从约翰开始--我想做一个随机子图,使得:
- “最大度”为= n
- 子图中的“节点数”为= m
- 子图中的所有节点都可以追溯到John
使用前面的问题R: All Nodes of Degree "N" that can be reached from Some Node,我尝试解决这个问题:
all_distances = as.numeric(max(distances(g, "John")))
max_degree = as.numeric(sample(0:all_distances, 1))
frame_with_max_degree = data.frame(unlist(ego(g, max_degree, "John")))
number_of_nodes = as.numeric(sample(0:nrow(frame_with_max_degree), 1))
**我的问题:**但是从这里开始,我不确定如何随机选择单个节点number_of_nodes
,使得所有这些节点都必然连接到“John”。
例如,假设n = 3,m = 2:我不想创建具有“约翰”、“杰森”和“史蒂文”的子图-因为即使“杰森和史蒂文”可能在随机生成的半径内,“杰森和史蒂文”仍然不直接连接到“约翰.”
有人能教我怎么做吗?
谢谢!
1条答案
按热度按时间bfhwhh0e1#
如果我正确理解了你的目的,你想在子图中保留从给定顶点出发的路径,例如“John”。我猜除了我的方法之外,应该还有一些其他的方法(我认为我的解决方案效率不够高)
例如,对于
n <- 3
和m <- 7
,我们可以得到像这样的子图