Я пытаюсь создать список, чтобы раскрасить края графа в зависимости от группировки вершин, к которым они подключаются.Если ребро соединяет двух членов одной группы, ребро имеет свой цвет.Если ребро находится между членами разных групп, ребра должны быть серыми.Вот мой код:
mnet = rgraph(10, mode = "graph", tprob = 0.5)
rownames(mnet)<-letters[1:10]
colnames(mnet)<-letters[1:10]
net = network(mnet, directed = FALSE, ignore.eval = FALSE, names.eval = "strength")
phono<-data.frame(letters=letters[1:10],phono=c("vowel", "consonant","consonant","consonant","vowel","consonant","consonant","consonant","vowel", "consonant"))
table(phono)
net %v% "phono" <- as.character(phono$phono)
nnet<-matrix(0, 10, 10)
for (i in 1:10){
for (j in 1:10){
nnet[i,j] = ifelse(phono$phono[phono$letters %in% rownames(mnet)[i]]==phono$phono[phono$letters %in% colnames(mnet)[j]],
as.character(phono$phono[phono$letters %in% rownames(mnet)[i]]),
"grey50")
}
}
ggnet2(net, color = "phono", palette = "Set2", label = "phono", edge.color = unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])
Я недоволен этим двойным циклом в середине моего кода R.Есть ли лучший способ сделать то, что я пытаюсь сделать?Это совмещает мой самый предыдущий вопрос, который больше пытался понять, почему «внешний» не работал.
Кроме того, код вообще не работает, но давайте делать одну проблему за раз.хотя length(unlist(nnet[upper.tri(nnet)])[unlist(mnet[upper.tri(mnet)])>0])==length(net %e% "strength")
Спасибо.