2014-02-12 75 views
2

當我厭倦將圖形寫入文件時,輸出文件不保留頂點名稱。 下面是代碼:將圖形寫入文件不保留頂點名稱

edgelist = read.csv("test.csv",header=FALSE,sep=",") 
g = graph.edgelist(as.matrix(edgelist),directed=FALSE) 
V(graph)$name <- V(graph) 
graph <- delete.vertices(graph, which(degree(graph) < 1)) 
write.graph(g, "temp.txt", "edgelist") 

test.csv:

1,11 
1,22 
2,11 
2,33 
3,22 
3,33 
4,44 

temp.csv:

0 4 
0 5 
1 4 
1 6 
2 5 
2 6 
3 7 
+0

「邊緣列表」格式不使用頂點名稱。使用另一種格式,或者手工編寫,即使用'get.edgelist'查詢指定的名稱,然後使用'write'。 –

回答

2

的 「EdgeList都」 格式始終數字,所以它不使用頂點名。如果您想保留這些名稱,請使用其他格式,例如ncol

g <- graph.formula(a-b-c) 
write.graph(g, format="ncol", file="test.ncol") 

g2 <- read.graph("test.ncol", format="ncol") 
str(g2) 
# IGRAPH UN-- 3 2 -- 
# + attr: name (v/c) 
# + edges (vertex names): 
# [1] a--b b--c 

Btw。當你做

V(graph)$name <- V(graph) 

這是不是最好的,因爲很多的igraph功能假設頂點名稱字符,V(graph)是數字。

V(graph)$name <- as.character(V(graph)) 

改爲。

+0

感謝您的代碼。 我試過了上面例子中提供的數據,我得到了:在rinterface.c:1225:屬性不是字符,無效值 我的作品是「graphml」格式,它看起來像是考慮節點的名稱。 –

+1

查看我的編輯,'V(g)$ name'不是字符類型,有時會導致問題。 –