Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将igraph对象转换和配置为JSON_R_Json_Igraph_Netjson - Fatal编程技术网

如何将igraph对象转换和配置为JSON

如何将igraph对象转换和配置为JSON,r,json,igraph,netjson,R,Json,Igraph,Netjson,我使用了d3r包将igraph对象转换为JSON格式,如下所示: # create small world network net <- sample_smallworld(size = 8, dim = 1, nei = 1, p = 0.33) # convert to json with directional edges data_json <- d3_igraph(as.directed(net)) 这几乎就是我想要的,但我需要配置两件事: 我希望节点

我使用了
d3r
包将
igraph
对象转换为JSON格式,如下所示:

# create small world network    
net <- sample_smallworld(size = 8, dim = 1, nei = 1, p = 0.33) 

# convert to json with directional edges   
data_json <- d3_igraph(as.directed(net)) 
这几乎就是我想要的,但我需要配置两件事:

  • 我希望节点ID从1开始,而不是从0开始
  • 我想删除链接中节点ID周围的引号(引号与nodes元素中的引号一样好),这样每个链接都是这样写的
    {“source”:1,“target”:2}
    ,而不是
    {“source”:“1”,“target”:“2”}

  • 当然,对于这样的小型网络,我可以手动完成这项工作,但对于大型网络来说,这既繁琐又不可扩展。有没有更好的方法可以做到这一点,那就是
    R

    将json转换为R列表并在回写json之前对数据进行必要的更改非常简单。下面是一个函数,它应该使用
    jsonlite
    软件包中的工具来完成
    d3\u igraph
    的输出:

    fix_d3_json <- function(json)
    {
      dj <- jsonlite::fromJSON(data_json)
      dj$nodes$id   <- as.numeric(dj$nodes$id) + 1
      dj$links[[1]] <- as.numeric(dj$links[[1]]) + 1
      dj$links[[2]] <- as.numeric(dj$links[[2]]) + 1
      jsonlite::toJSON(dj)
    }
    
    fix_d3_json{“name”:[“Watts Strogatz random graph”],“dim”:[1],“size”:[8],“nei”:[1],
    #>“p”:[0.33],“循环”:[false],“多个”:[false]}
    
    1。在制作JSON之后,您不能只向每个ID添加1吗?是的,这是我想做的,但是如何做呢?一种可能是直接使用igraph编辑节点ID。可能是使用set_vertex_attr(“id”,value=1:8),我尝试了
    net%set_vertex_attr(“id”,value=c(1:8))
    ,但结果并不理想。虽然您的输出看起来完全正确,但我必须在函数中做一个小小的更改,才能让我完成这项工作:
    fix\u d3\u json
    
    fix_d3_json <- function(json)
    {
      dj <- jsonlite::fromJSON(data_json)
      dj$nodes$id   <- as.numeric(dj$nodes$id) + 1
      dj$links[[1]] <- as.numeric(dj$links[[1]]) + 1
      dj$links[[2]] <- as.numeric(dj$links[[2]]) + 1
      jsonlite::toJSON(dj)
    }
    
    library(igraph)
    library(d3r)
    
    # create small world network    
    net <- sample_smallworld(size = 8, dim = 1, nei = 1, p = 0.33) 
    
    # convert to json with directional edges   
    data_json <- d3_igraph(as.directed(net))
    
    # Fix json
    data_json <- fix_d3_json(data_json)
    
    data_json
    #> {"nodes":[{"id":1},{"id":2},{"id":3},{"id":4},{"id":5},{"id":6},{"id":7},
    #> {"id":8}],"links":[{"source":1,"target":6},{"source":1,"target":2},
    #> {"source":2,"target":3},{"source":3,"target":4},{"source":2,"target":6},
    #> {"source":3,"target":6},{"source":6,"target":7},{"source":1,"target":7},
    #> {"source":6,"target":1},{"source":2,"target":1},{"source":3,"target":2},
    #> {"source":4,"target":3},{"source":6,"target":2},{"source":6,"target":3},
    #> {"source":7,"target":6},{"source":7,"target":1}],"attributes":
    #> {"name":["Watts-Strogatz random graph"],"dim":[1],"size":[8],"nei":[1],
    #> "p":[0.33],"loops":[false],"multiple":[false]}}