我有一个关于R
使用包set.edge.value
命令将边缘值分配给网络的问题network
。我的大型网络中的分配值不正确,因此我生成了一个小型网络以使问题更容易可见和可重现。这是生成网络的代码(包括要分配的值)。
a <- c(rep("a",3), "b", "c", rep("d",3), rep("f",2), "g")
b <- c("c", "e", "f", "a", "g", "a", "e", "f", "b", "e", "c")
c <- 1:11
d <- data.frame(a,b,c)
mat <- network(d[,c(1,2)], directed=T, attrname="val")
set.edge.value(mat, "val", c)
mat2 <- as.matrix.network(mat, attrname="val")
网络现在如下所示。
> mat2
a b c d e f g
a 0 0 4 0 7 3 0
b 2 0 0 0 0 0 0
c 0 0 0 0 0 0 1
d 4 0 0 0 10 6 0
e 0 0 0 0 0 0 0
f 0 2 0 0 1 0 0
g 0 0 10 0 0 0 0
但是,这些显然是错误的值,如下面的 edgelist 形式所示(加上 c,值)。所以边ab
应该有 value 1
、ae
value2
等。网络填充右边的边,即只填充那些确实存在的边,但值是错误的。在我看来,它使用向量中的值c
并尝试填充从 开始的每条边aa
,然后ab
等(即它逐行填充网络),但仅填充现有边缘。当它用完值时,它会使用回收规则重新开始。有谁知道如何用适当的值填充边缘?我已经尝试了一段时间,但我似乎无法弄清楚,谷歌也没有太多帮助(或者我正在寻找错误的东西)。任何帮助,将不胜感激!谢谢!
> d
a b c
1 a c 1
2 a e 2
3 a f 3
4 b a 4
5 c g 5
6 d a 6
7 d e 7
8 d f 8
9 f b 9
10 f e 10
11 g c 11