如何在R的igraph图中正确求和节点值?
关于igraph网络图节点值求和的代码验证与修正
一、已创建的网络图与节点值数据
网络图创建代码
library(igraph) # 创建边数据框 my_data <- data.frame(to = c(1,2,3,4,2,4), from = c(2,2,2,2,6,5)) # 创建igraph对象 my_graph <- graph_from_data_frame(my_data, directed = FALSE) # 绘制网络图 plot(my_graph)
节点值数据框
set.seed(123) values = data.frame(id = c(1,2,3,4,5,6,7,8,9,10), value = rnorm(10,100,10))
生成的节点值如下:
id value 1 1 101.19245 2 2 102.43687 3 3 112.32476 4 4 94.83936 5 5 90.07493 6 6 116.75697 7 7 95.58837 8 8 92.76934 9 9 87.63727 10 10 87.15284
二、全节点值求和代码的正确性
你编写的全节点值求和代码是正确的,可以准确得到网络图中所有节点对应值的总和:
# 提取节点名称 vertices <- V(my_graph)$name # 匹配节点对应的值 vertex_values <- values$value[match(vertices, values$id)] # 求和 sum_vertex_values <- sum(vertex_values)
说明:V(my_graph)$name返回字符型节点名,values$id是数值型,R会自动完成类型匹配,最终能精准提取网络图中存在的节点(1、2、3、4、5、6)对应的值并求和,运行后结果约为617.62。
如果想让代码更严谨,可将节点名转为数值型后再匹配:
vertices <- as.integer(V(my_graph)$name) vertex_values <- values$value[match(vertices, values$id)] sum_vertex_values <- sum(vertex_values)
三、特定节点值求和代码的修正
你整理的特定节点求和示例中,邻居节点求和的代码存在变量未定义的问题,以下是修正后的完整代码:
1. 指定节点值求和
# 定义要求和的节点 nodes_to_sum <- c(1, 5, 6) # 筛选对应节点的值 node_values <- subset(values, id %in% nodes_to_sum) # 求和 sum_values <- sum(node_values$value) # 绘制子图 plot(induced.subgraph(graph=my_graph,vids=nodes_to_sum))
2. 指定节点的邻居值求和
# 获取节点2的邻居节点 n = neighbors(my_graph, 2) # 筛选邻居节点对应的值(原代码中neighbor_nodes未定义,应改为n) neighbor_values <- subset(values, id %in% n) # 求和 sum_values <- sum(neighbor_values$value) # 绘制邻居节点的子图 plot(induced.subgraph(graph=my_graph,vids=n ))
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

