Я пытаюсь создать сеть с использованием пакета R GGally, в частности, функции ggnet2.Я создал здесь воспроизводимый пример моей проблемы:
net = rgraph(10, mode = "graph", tprob = 0.5)
rownames(net)<-letters[1:10]
colnames(net)<-letters[1:10]
net = network(net, directed = FALSE)
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)
edge_color <- outer(X=1:nrow(phono),
Y=1:nrow(phono),
FUN = function(x,y) {
ifelse(phono$phono[phono$letters %in% letters[x]]==phono$phono[phono$letters %in% letters[y]],
as.character(phono$phono[phono$letters %in% letters[y]]),
"grey50")
})
Error in dim(robj) <- c(dX, dY) :
dims [product 100] do not match the length of object [10]
ggnet2(net, color = "phono", palette = "Set2", label = "phono", edge.color = edge_color)
Мой реальный пример связан с протеомными данными, но при этом возникает та же ошибка.
Я прочитал похожие вопросы, в том числе следующие: Ошибка "dims [product xx] не соответствует длине объекта [xx]" при использовании функции R `external`
Эта ссылка заставляет меня думать, что ifelse не выполняет то, что я ожидаюэто волшебным образом.На самом деле, я думаю, что я использую очень неправильный синтаксис, чтобы делать то, что я хочу.
Я хочу, чтобы края были окрашены на основе группировки двух соединительных узлов.Если они принадлежат к разным группам, то я хочу, чтобы линия была серой.Помогите?Я опубликую решение, если узнаю, прежде чем кто-нибудь ответит.