当我厌倦了将图形写入文件时,输出文件不保留顶点名称。 这是代码:
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 :(得分: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.edgelist
和write
进行手动导出的其他答案(我使用了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