【问题标题】:Producing multiple graph objects in igraph from lists of dataframes从数据框列表中生成 igraph 中的多个图形对象
【发布时间】:2017-06-03 04:49:56
【问题描述】:

我有两个大约 80 个数据帧的列表——一个用于节点,另一个用于边缘。我想使用 igraph 函数 graph_from_dataframe 来连接节点和边数据框,从而创建一个 igraph 对象列表。目前我一直在尝试这个:

glst <- mapply(graph_from_data_frame, 
           d=ListOfEdgeDfs, 
           vertices=ListOfNodeDfs,
            SIMPLIFY = FALSE,
           directed =F)

但是,这会给出错误消息:

Error in (function (d, directed = TRUE, vertices = NULL)  : 
  Some vertex names in edge list are not listed in vertex data frame

有人对我如何做到这一点有任何想法吗?

【问题讨论】:

    标签: r dataframe igraph mapply


    【解决方案1】:

    以下工作(对于 2 个图表的列表,同样适用于任意数量的图表,您能否确保数据框结构相似):

    ListOfEdgeDfs <- list(data.frame(from=letters[1:3], to=c('b', 'c', 'd')), 
                          data.frame(from=rep('a',3), to=c('b', 'c', 'd')))
    ListOfEdgeDfs
    #[[1]]
    #  from to
    #1    a  b
    #2    b  c
    #3    c  d
    #[[2]]
    #  from to
    #1    a  b
    #2    a  c
    #3    a  d
    
    ListOfNodeDfs <- list(data.frame(node=letters[1:4]), data.frame(node=letters[1:4]))
    ListOfNodeDfs
    #[[1]]
    #  node
    #1    a
    #2    b
    #3    c
    #4    d
    #[[2]]
    #  node
    #1    a
    #2    b
    #3    c
    #4    d
    
    library(igraph)
    glst <- mapply(graph_from_data_frame, 
                   d=ListOfEdgeDfs, 
                   vertices=ListOfNodeDfs,
                   SIMPLIFY = FALSE,
                   directed =F)
    par(mfrow=c(1,2))
    #plot(glst[[1]])
    #plot(glst[[2]])
    

    [已编辑]

    试试这个:

    n <- 2 # number of graphs
    par(mfrow=c(2,1)) # if you have 100 graphs, try par(mfrow=c(10,10)) e.g.
    invisible(sapply(1:n, function(i) plot(glst[[i]], vertex.size=50)))
    

    【讨论】:

    • 嗨桑迪潘!伟大的!你知道我可以如何更改代码,以便在一行代码中绘制所有图形吗?即,而不是写 plot(glst[[1]]), plot(glst[[2]])... plot(glst[[n]]) 在一行中完成所有操作
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2015-08-18
    相关资源
    最近更新 更多