加权图上的重新排列()函数[igraph]

时间:2015-05-21 01:57:52

标签: r igraph

我知道有一个关于此问题的主题,但我测试了他们在那里说的方式并且它没有用。 我在加权图中使用了rewire(),并且权重值没有转移到随机图中。

>E(g)$weight
 [1] 0.7819693 0.7010414 0.7978514 0.7249481 0.8295889 0.9177085 0.6719408 0.6826897 0.8947611 0.7758267 0.9064469
[12] 0.8236665 0.7248115 0.7354699 0.7117599 0.7144824 0.7985431 0.6816086 0.6760310 0.8653517 0.7257873 0.8427769
[23] 0.7097822 0.6987642 0.8507158 0.9149504 0.8357126 0.9664860 0.8338331 0.7122003 0.7504638 0.6995491 0.8643859
[34] 0.8684505 0.8459311 0.7384111 0.7128058 0.7486494 0.8996575 0.8910186 0.7241546 0.7661719 0.7340575 0.8074797
[45] 0.9107946 0.8758860 0.9171899 0.7134565 0.7687820 0.8112824 0.8735326 0.6853292 0.7392045 0.6772795 0.7064094
[56] 0.7427759 0.8425719 0.9106251 0.8170464 0.8509228 0.7680797 0.7893403 0.8618796 0.7029206 0.6998891 0.9484128
[67] 0.7075254 0.8204882 0.7728777 0.6936007 0.6737966 0.8568317 0.7938365 0.7372963 0.7554374 0.7738223 0.7363732
[78] 0.6743658 0.7819415 0.7576451 0.8942746 0.7261943 0.7816130 0.8804163 0.8554249 0.7661933 0.7218388 0.8498031
[89] 0.8146921 0.7871279 0.8496426 0.9418762

>g2<-rewire(g,niter=1000)
> is.weighted(g2)
[1] TRUE

> E(g2)$weight
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[39] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[77] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

igraph包是最新的,甚至随机图也会发生这种情况。抖动的边缘没有权重

> g1<-graph.ring(100)
> plot(g1)
> E(g1)$weight<-seq_len(ecount(g1))
> g3<-rewire(g1,niter=100)
> is.weighted(g3)
[1] TRUE
> E(g3)$weight
[1]  3  8 11 23 24 27 28 45 60 61 65 69 71 78 84 91 93 98 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[38] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[75] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
> g3<-rewire(g1,niter=10)
> E(g3)$weight
[1]   1   2   3   4   5   6   8   9  10  11  12  13  14  15  16  17  18  19  20  22  24  25  26  27  28  29  30  32
[29]  34  36  38  41  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  67
[57]  68  69  71  72  73  74  76  77  78  79  80  81  83  84  85  86  87  89  90  91  92  94  98  99 100  NA  NA  NA
[85]  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA

这是一个错误还是我做错了什么? 它确实说它是加权的,但是valeus都是NA(至少是随机的)。

> packageDescription("igraph")$Version
[1] "0.7.1"

有任何想法或建议吗?

编辑: 更进一步,在这种情况下,权重应该如何表现?例如,如果边缘重量A - B移动到A - C,它的重量应该保持相同的值吗?或者它应该改变(因此,所有其他),因此graph.strength分布保持不变?

1 个答案:

答案 0 :(得分:1)

这不是错误,而是缺少功能 - rewire()不支持边权重。如果您不想保留边缘的graph.strength()分布,一个简单的解决方法是取E(g1)$weight,将其随机播放,然后将随机向量重新分配给E(g3)$weight