我正在尝试使用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] do not match the length of object [xx]" error in using R function `outer`
此链接使我认为ifelse并未按照我的预期做魔术。实际上,我认为我使用了非常错误的语法来完成我想做的事情。
我想要的是根据两个连接节点的分组对边缘进行着色。如果它们属于不同的组,那么我希望该行为灰色。救命?如果在有人回答之前找到了解决方案,我会把它发布出来。