当NetLogo打开

时间:2016-01-12 09:40:11

标签: r netlogo igraph

最终我将要使用RNetLogo将NetLogo网络传递给R,以便R可以使用包igraph和keyplayer或influenceR进行一些网络分析,然后将结果传递回NetLogo。我目前正在分别运行NetLogo和R,以便在将R代码放入RNetLogo所需的格式之前确保我的R代码正常工作。

我在NetLogo中创建网络并传递给igraph,但igraph对于图形格式是不稳定的。传输的最佳格式似乎是gml,但用于保存gml的NetLogo网络扩展不满足igraph要求。

我写了一个简单的gml导出。看起来像:

to export-simple-gml
  carefully [ file-delete "temp.gml" ] [ ]
  file-open "temp.gml"
  file-print "graph" file-print "["
  file-print "  directed 0"
  ask turtles
  [ file-print "  node" file-print "  ["
    file-type "    id " file-print who
    file-print "  ]"
  ]
  ask links
  [ let source one-of both-ends
    let target [other-end] of source
    file-print "  edge" file-print "  ["
    file-type "    source " file-print [who] of source
    file-type "    target " file-print [who] of target
    file-print "  ]"
  ]
  file-print "]"
  file-close
end

R导入代码非常简单:

library(igraph)
gg <- read_graph(file = "temp.gml", format = "gml")

如果我在运行NetLogo功能时关闭R,然后关闭NetLogo并打开R进行导入,这一切都有效。但是,如果我在先前测试导入后打开了R,它就会失败。如果我没有关闭NetLogo,则导入失败。如果我从NetLogo导出时打开R,则会附加导出文本而不是替换文件。

NetLogo有没有办法强制释放文件?或者,有没有办法从R覆盖NetLogo对(已关闭但未发布)文件的控制?

1 个答案:

答案 0 :(得分:1)

我试图重现此问题,但未能这样做。我正在使用

  • NetLogo 5.3(Mac OS X)
  • R 3.2.3
  • igraph 1.0.1

我还尝试使用R read.csv编写和阅读CSV。我无法复制你描述的确切问题。你有可能在这个程序以外的任何地方打开文件吗?您的上述任何一种版本都不同吗?

我注意到的一件事是,当文件原语出错时,文件保持打开状态,这可能导致上述过程写入无效的gml文件。我建议在该功能的顶部调用file-closefile-close-all,就像使用file-delete一样。