在 NetLogo 打开时释放由 NetLogo 创建的文件

Release a file created by NetLogo while NetLogo open

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

我正在 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 对(已关闭但未发布的)文件的控制?

我试图重现这个问题,但没有成功。我正在使用

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

我还尝试使用 R 编写和读取 CSV read.csv。我无法复制您描述的确切问题。您是否有可能在除此过程之外的任何地方打开文件?您的上述任何版本是否不同?

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

所做的那样