繁体   English   中英

Python Networkx到R igraph转换时出错

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM