R语言igraph包代码报错:Unknown vertex selected 求助
嘿,我来帮你搞定这个igraph的问题!你遇到的simple_vs_index(x, ii, na_ok) :Unknown vertex selected错误,根源是变量笔误加上索引逻辑的小问题,咱们一步步修复:
问题出在哪?
- 变量名写错了:你先把所有顶点的局部传递性赋值给了
qq,但紧接着写了qq <- max(q, na.rm = TRUE)——这里的q根本没定义啊!这会让qq变成NA,后面用tr==qq筛选顶点时,没有任何顶点能匹配这个条件,自然就找不到顶点了。 - 重复计算没必要:你两次调用
transitivity计算局部传递性,既浪费资源又容易搞混变量。
修复后的完整代码
library(igraph) # ggplot2在这里没用到,如果不需要可以删掉 library('ggplot2') # 加载Zachary空手道俱乐部图 subgraphz <- graph.famous("Zachary") # 计算每个顶点的局部传递性,存到顶点属性tr里 V(subgraphz)$tr <- transitivity(subgraphz, v = V(subgraphz), type = "local") # 找出最大的传递性值(处理可能的NA,虽然Zachary图没孤立点,但好习惯) max_trans <- max(V(subgraphz)$tr, na.rm = TRUE) # 设置所有顶点默认大小为5 V(subgraphz)$size <- 5 # 把传递性等于最大值的顶点大小改成15 V(subgraphz)[tr == max_trans]$size <- 15 # 绘图 plot(subgraphz)
关键修复细节
- 把笔误的
max(q, ...)改成了max(V(subgraphz)$tr, ...),这样能正确拿到所有顶点传递性的最大值。 - 合并了传递性的计算,只调用一次
transitivity,既高效又避免变量混乱。 - Zachary图里有好几个顶点的局部传递性是1.0(它们的邻居之间完全连通),修复后这些顶点都会显示成大圆点,完全符合你的需求。
运行这段代码,你就能看到预期的图,不会再报错啦!
内容的提问来源于stack exchange,提问作者pesya
相关产品推荐
相关产品推荐

