将图形写入文件不保留顶点名称

时间:2014-02-12 11:26:45

标签: r igraph

当我厌倦了将图形写入文件时,输出文件不保留顶点名称。 这是代码:

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

3 个答案:

答案 0 :(得分: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

顺便说一下。当你做的时候

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

这不是最好的,因为许多igraph函数假设顶点名称是字符,而V(graph)是数字。

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

代替。

答案 1 :(得分:0)

Gabor Csardi关于使用get.edgelistwrite进行手动导出的其他答案(我使用了ncolumns = 2)确实给了我奇怪的结果:许多边以某种方式重复并且扭曲了计算。 我特别需要在R-igraph和Python之间进行转换-networkX 我常用的格式是“ graphml” 我使用R导出: write_graph(igraphNetwork, paste0("edgelist/",filename,".graphml"), format = "graphml")

并使用Python导入: G = nx.read_graphml(path) G = nx.relabel_nodes(G, nx.get_node_attributes(G, 'name'))

当我重新导入到R时,请确保所有标签节点都匹配并通过简单的度数中心性比较进行检查,以确保一切正常。我使用网状封装在R和Python之间进行通信。

答案 2 :(得分:-1)

as.character选项对我不起作用。我找到的解决方案是:

V(graph)$id = V(graph)$name