У меня возник вопрос о назначении значениям краев сети в R
с использованием команды пакета network
. Назначенные значения в моей большой сети просто не правы, поэтому я создал небольшую сеть, чтобы сделать проблему более легкой и воспроизводимой. Вот код для создания сети (включая значения, которые нужно назначить).Установить значения края с использованием сетевого пакета в R
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
Однако, это явно неправильные значения, как показано ниже в форме эджелиста (плюс c, значения). Таким образом, край ab
должен иметь значение 1
, ae
значение 2
и т. Д. Сеть заполняет правые края, то есть только те, которые существуют, но значения неверны. Мне кажется, что он использует значения в векторе c
и пытается заполнить каждое ребро, начинающееся с aa
, затем ab
и т. Д. (Т. Е. Заполняет сеть за строкой), но только заполняя существующие ребра. Когда у него заканчиваются значения, он запускается снова с использованием правила утилизации. Кто-нибудь есть идея, как заполнить края соответствующими значениями? Я пробовал это какое-то время, но я не могу понять это, и Google тоже не очень помогает (или я искал неправильную вещь). Любая помощь будет оценена! Благодаря!
> 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