如何在R语言igraph新版本中实现sample_与sbm()函数?
重构igraph更新后的随机块模型代码
我之前也碰到过igraph版本更新后旧代码失效的情况,刚好能帮你解决这个问题!
原来的代码依赖旧版igraph的sample_函数来给SBM图附加顶点属性,但新版本里这个函数的接口已经调整,更推荐用直观的分步方式实现相同效果,重构后的代码如下:
# 1. 生成随机块模型图 sbm_2 <- sbm( n = 200, pref.matrix = diag(0.2, 2) + 0.2, block.sizes = c(100, 100) ) # 2. 给顶点添加true_block属性 V(sbm_2)$true_block <- rep(1:2, each = 100)
如果你习惯用函数式的方式赋值,也可以用set_vertex_attr函数来完成属性添加:
sbm_2 <- set_vertex_attr( sbm( n = 200, pref.matrix = diag(0.2, 2) + 0.2, block.sizes = c(100, 100) ), name = "true_block", value = rep(1:2, each = 100) )
为什么这么改?
旧版的sample_函数在igraph更新后已经被弃用或调整了参数逻辑,现在官方更推荐分离"生成图"和"添加属性"的操作,这样代码可读性更高,也更符合新版本igraph的API设计思路。
两种重构方式都能完全复现你原来代码的效果:生成一个200个顶点、分两个各100顶点块的随机块模型,同时给每个顶点标记对应的真实块标签true_block。
内容的提问来源于stack exchange,提问作者user321627
相关产品推荐
相关产品推荐

