2017-02-12 51 views
4

我试图使用ggnet2来可视化网络分析,但已经遇到与小插曲的错误。ggnet2:错误:每个变量必须是一个1d原子向量或列表

我可以生成一个随机的网络,

library(ggnet2) 
library(network) 
library(sna) 
library(ggplot2) 

net = rgraph(10, mode = "graph", tprob = 0.5) 
net = network(net, directed = FALSE) 

# vertex names 
network.vertex.names(net) = letters[1:10] 

,看起来合理

>net 
Network attributes: 
vertices = 10 
directed = FALSE 
hyper = FALSE 
loops = FALSE 
multiple = FALSE 
bipartite = FALSE 
total edges= 28 
missing edges= 0 
non-missing edges= 28 

Vertex attribute names: 
vertex.names 

No edge attributes 

然而,当我尝试运行的输出..

ggnet2(net) 

我得到一个错误

Error: Each variable must be a 1d atomic vector or list. Problem variables: 'x', 'y', 'xend', 'yend' 

由于net是一个列表,因此我不清楚这个错误是如何产生的,并且其中的所有变量都是列表。我已经检查过,以确保我拥有所有必需的软件包,并且它们是最新的以及最新的R版本。

我刚试过ggnetwork,似乎也得到了类似的错误。

有关为何出现此错误的任何想法?

+0

我不能重现这一点(虽然我确实包含了'ggnet2'函数的'库(GGally)'调用)。 – user20650

+0

好的,谢谢...必须是我的环境中的东西。 –

+0

我有这个相同的问题。我试图按照教程:https://briatte.github.io/ggnet/ – chrislarson

回答

1

错误消息说

Error: Each variable must be a 1d atomic vector or list. Problem 
variables: 'x', 'y', 'xend', 'yend' 

如果以下

library(ggnetwork) 
net <- ggnetwork(net) 
class(net$x) 

你会发现,x是一列矩阵。您的其他组件也是如此。这样做

net$x <- net$x[,1] 
net$y <- net$y[,1] 
net$xend <- net$xend[,1] 
net$yend <- net$yend[,1] 

将改变这些所有1D原子向量和

ggplot(net, aes(x = x, y = y, xend = xend, yend = yend)) + 
    geom_edges(aes(linetype = "directed"), color = "grey50") 

应该工作。你可以阅读更多关于如何使更好的图形工作的捷径。

1

我在briatte.github.io/ggnet教程后遇到同样的问题。

我更新了'igraph','ggplot','intergraph','GGally'软件包并从源代码中安装了'ggnetwork'后,问题消失: install.packages("ggnetwork", type="source")

这是建议here来解决另一个问题,但不知何故它为我在这一个工作。也许你可以试试看。

0

我想我已经找到了解决方案,至少在我的机器上。我在Win 10上运行R 3.4.3,但这可能与平台无关。

到现在为止我已经安装了GGally的CRAN版本,networksna一起,就像在example提及,并且这种设置扔上述完全相同的错误。我很困惑,因为原来的network对象甚至没有像x,xend等成员。事实证明,这些实际上是ggnetwork对象的成员,它在命令ggnet()ggnetwork vignette)期间不可见地创建。

所以我试过安装ggnetwork:install.packages("ggnetwork")以及ggnet的源版本 (devtools::install_github("briatte/ggnet"))。

  • ggnetwork被成功地安装,但包无法加载,因为它说,GGPLOT2未安装(我已经发现了奇怪的,因为它是我日常使用的基础上,为部分包tidyverse库)。

  • 由于某些原因,与已经加载的软件包相关的ggnet安装失败。

我已经重新启动R对话,试图加载再次ggnetwork,这再次失败,缺乏GGPLOT2的,所以我安装GGPLOT2。我再次尝试从源代码安装ggnet,(这次在加载任何软件包之前),它工作。

所以,总结一下:

重启R对话后:

install.packages("ggnetwork") 
install.packages("ggplot2") 
devtools::install_github("briatte/ggnet") 

我不知道到底是哪一步做到了,但事后的例子脚本生成的图形阴谋,就像它应该:

library(ggnetwork) 
library(network) 
library(sna) 
library(ggnet) 

net = rgraph(10, mode = "graph", tprob = 0.5) 
net = network(net, directed = FALSE) 

network.vertex.names(net) = letters[1:10] 

ggnet2(net) 
相关问题