最终我将要使用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对(已关闭但未发布)文件的控制?
答案 0 :(得分:1)
我试图重现此问题,但未能这样做。我正在使用
我还尝试使用R read.csv
编写和阅读CSV。我无法复制你描述的确切问题。你有可能在这个程序以外的任何地方打开文件吗?您的上述任何一种版本都不同吗?
我注意到的一件事是,当文件原语出错时,文件保持打开状态,这可能导致上述过程写入无效的gml文件。我建议在该功能的顶部调用file-close
或file-close-all
,就像使用file-delete
一样。