2017-02-12 53 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) 
相關問題