有错误的Python Networkx到R图的转换

2024-04-24 23:23:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将下面的Python代码(for Networkx)翻译成R(for 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的部分转换

^{pr2}$

这是我运行R代码的最后一部分时收到的错误代码:

Error in intI(i, n = x@Dim[1], dn[[1]], give.dn = FALSE) : 
  no 'dimnames[[.]]': cannot use character indexing

在PythonNetworkx中,可以通过graphname.function.函数(例如DG.add_node(dogID,typ='animal'))。在

在R的igraph中有等价物吗?在

有没有什么方法可以在不定义节点数的情况下调用R的igraph中的节点?在

另外,你会提供一些关于完成R的翻译的提示或建议吗?在

谢谢。在


以下包含.csv数据:

id、物种、位置1、位置2、动物id、SUM病毒、流感-1、流感-2、流感-3、流感-4、流感-5、流感-6、流感-7、流感-8、流感-9
YUI-4322,主机1,公园4,公园,MW 391,1,0,0,0,0,0,0,0,0
YUI-4321,主机2,公园4,公园,MW 390,0,0,0,0,0,0,0,0,0
YUI-4320,主机2,公园4,公园,MW 389,1,0,0,0,0,0,0,0,0
YUI-4319,主机2,公园4,公园,MW 388,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 YUI-4317,主机1,公园4,公园,MW 386,0,0,0,0,0,0,0,0,0
YUI-4316,主机2,公园4,公园,MW 385,1,1,0,0,0,0,0,0,0,0
YUI-2315,主机1,防护罩2,防护罩,MV319,1,0,0,0,0,0,1,0,0
YUI-4314,主机1,防护罩2,防护罩,MV 332,1,0,0,0,0,0,1,0,0


Tags: csvinaddnodeformwdgdog
1条回答
网友
1楼 · 发布于 2024-04-24 23:23:25

我不明白你在做什么,但我可以告诉你,狗是一个图形对象,你试图在一条直线上做多件事情,这些事情在一起是没有意义的。在

叫狗[流感]会给出所有与流感相关的顶点。在

添加顶点(8)是向图形中添加8个新顶点。在

add_vertices(dogs[flu],typ=“host”)正在向图中添加相同的节点,如果dogs[flu]是可调用的,那么这些节点将已经存在。在

只需在前面添加所有节点(add_vertices[fluCols],尽管可能需要int而不是字符串),然后在之后修改这些节点。在

相关问题 更多 >