ggnet2:错误:每个变量必须是1d原子向量或列表

时间:2017-02-12 19:41:17

标签: r ggplot2

我正在尝试使用ggnet2来显示网络分析,但是在插图中遇到了错误。

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

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,似乎也遇到了类似的错误。

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

3 个答案:

答案 0 :(得分:1)

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

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

建议here解决另一个问题,但不知怎的,它对我有用。也许你可以尝试一下。

答案 1 :(得分: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")

应该有效。您可以阅读有关如何使ggnetwork适用于更漂亮的图表的更多信息。

答案 2 :(得分:0)

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

到目前为止,我已经安装了GGally的CRAN版本,以及networksna,正如example中提到的那样,此设置抛出了上面提到的完全相同的错误。我很困惑,因为原始network对象甚至没有xxend等成员。事实证明这些成员实际上是{{1}的成员对象,在命令ggnetworkggnetwork vignette)中无形地创建。

所以我尝试安装ggnetwork:ggnet()以及ggnet的源版本 (install.packages("ggnetwork"))。

  • ggnetwork已经成功安装,但是无法加载包,因为它说没有安装ggp​​lot2(我发现它很奇怪,因为它是我用的一个包每日作为devtools::install_github("briatte/ggnet")库的一部分)。

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

我重新启动了R会话,再次尝试加载ggnetwork,由于缺少ggplot2而再次失败,所以我安装了ggplot2。我再次尝试从源代码安装ggnet(这次是在加载任何软件包之前)并且它有效。

所以,总结一下:

重新启动R会话后:

tidyverse

我不确切地知道它做了哪一步,但之后示例脚本产生了一个图形图,就像它应该的那样:

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