[英]Python Networkx to R igraph conversion with errors
我正在尝试将以下Python代码(对于Networkx
)转换为R(对于igraph
)。
# Python code
import csv
import networkx as nx
import urllib
DG=nx.DiGraph()
dogcsv=csv.DictReader(open("dogs.csv","rU"))
dogid=0
nodeStr=['id', 'species', 'Location 1', 'Location 2']
nodeInt=['sumflu']
fluCols=['Influenza-1', 'Influenza-2', 'Influenza-3', 'Influenza-4',
'Influenza-5', 'Influenza-6', 'Influenza-7', 'Influenza-8', 'Influenza-9']
for flu in fluCols:
DG.add_node(flu,typ="species")
for row in dogcsv:
dogID='animal'+str(dogid)
DG.add_node(dogID,typ='animal')
for dog in nodeStr:
DG.node[dogID][dog]=row[dog]
for dog in nodeInt:
DG.node[dogID][dog]=int(row[dog])
for flu in fluCols:
if str(row[flu])=='1':
DG.add_edge(dogID,flu)
dogid=dogid+1
以下是我尝试从Python到R的部分转换。
# R code
library("data.table")
library("igraph")
dogs <- make_empty_graph()
dogcsv <- fread("dogs.csv")
dogid <- 0
nodeStr <- c("id", "species", "Location 1", "Location 2")
nodeInt <- "sumflu"
fluCols <- c("Influenza-1", "Influenza-2", "Influenza-3", "Influenza-4",
"Influenza-5", "Influenza-6", "Influenza-7", "Influenza-8")
for(flu in fluCols) {
dogs[flu] <- dogs %>% add_vertices(8) %>% add_vertices(dogs[flu], typ = "host")
}
这是我运行R代码的最后一部分时收到的错误代码:
Error in intI(i, n = x@Dim[1], dn[[1]], give.dn = FALSE) :
no 'dimnames[[.]]': cannot use character indexing
在Python Networkx
,可以通过graphname.function(例如DG.add_node(dogID,typ='animal')
)来调用该图。
R的igraph
是否有与之等效的igraph
?
有什么方法可以调用R的igraph
的节点,而不必定义节点数?
另外,您是否会提供有关完成到R的翻译的提示或建议?
谢谢。
以下包含.csv数据:
id,种类,位置1,位置2,动物id,sumvirus,流行性感冒1,流行性感冒2,流行性感冒3,流行性感冒4,流行性感冒5,流行性感冒6,流行性感冒7,流行性感冒8,流行性感冒9
YUI-4322,host1,Park 4,Park,MW 391,1,0,0,0,0,0,0,0,0,0
YUI-4321,host2,Park 4,Park,MW 390,0,0,0,0,0,0,0,0,0,0
YUI-4320,host2,Park 4,Park,MW 389,1,0,0,0,0,0,0,0,0,0
YUI-4319,host2,Park 4,Park,MW 388,0,0,0,0,0,0,0,0,0,0
YUI-7318,host2,Park 4,Park,MW 387,1,0,0,0,0,0,0,0,0,0
YUI-4317,host1,Park 4,Park,MW 386,0,0,0,0,0,0,0,0,0,0
YUI-4316,host2,Park 4,Park,MW 385,1,1,0,0,0,0,0,0,0,0
YUI-2315,host1,Shelter 2,Shelter,MV319,1,0,0,0,0,0,0,1,0,0
YUI-4314,host1,Shelter 2,Shelter,MV 332,1,0,0,0,0,0,0,1,0,0
我对您正在做的事情感到困惑,但是我可以告诉您,狗是一个图形对象,并且您正在尝试在同一行中做多件事,而这些事情没有什么共同的意义。
称狗为“ flu”会给出与flu相关的所有顶点。
add_vertices(8)将8个新顶点添加到图形中。
add_vertices(dogs [flu],typ =“ host”)将图中相同的节点添加到可调用dogs [flu]的情况下。
只需在所有节点之前添加(add_vertices [fluCols],尽管它可能需要整数而不是字符串),然后再修改这些节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.