2014-02-12 1 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

"edgelist"형식은 정점 이름을 사용하지 않습니다. 다른 형식을 사용하거나 직접 작성하십시오. 즉,'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'은 문자가 아니기 때문에 때때로 문제가 발생합니다. –

관련 문제