NetLogo R 扩展

NetLogo 的 R-Extension 提供了在 NetLogo 模型中使用统计软件 R (Gnu S)(参见 R 项目网站 )的原语。有一些原语可以使用来自 NetLogo 变量或代理的值创建 R-Variables 和其他原语来评估 R 中有或没有返回值的命令。

使用

要在模型中使用扩展,请在程序选项卡顶部添加一行:

extensions [ r ]

如果您的模型已经使用其他扩展,那么它已经有 extensions 一行,所以只需添加 r 到列表中即可。

有关使用 NetLogo 扩展的更多信息,请参阅 扩展指南

有关 R-Extension 的使用示例,可​​以 从项目存储库 下载模型。这些模型与 NetLogo 一起安装在 R 扩展的“models”目录中。请注意(自 NetLogo 6.0 起)这些模型 包含在 NetLogo 模型库中。

一些技巧

绘图

如果要使用 R 的绘图功能,可以通过 r:setPlotDevice 激活 JavaGD 绘图设备,参见“plot-example1.nlogo”模型。这是首选方法!

但是您也可以使用标准的 R 设备,但是,您必须给 R 一些 cpu 时间,例如,通过 sys.sleep(0.01) 使用永久按钮运行评估。参见“plot-example2.nlogo”。(非常感谢 Thomas Petzold!)。也可以将绘图创建到文件中。请参阅示例文件夹中的“plot-into-file-example.nlogo”。

从/向文件加载和保存数据

可以直接在 R 中从文件加载和保存数据。此代码片段说明:

r:eval "dataname <- read.table('<path to file>')" ; read file
r:eval "write.table(dataname, file='<filename>')" ; write file

单元格中带有向量的 Data.frame

通常,一个 data.frame 单元格只包含一个值。每列都表示为一个向量,如果您将向量的向量放入 data.frame,它将被分成几列。使用 R-Extension,当您将 NetLogo 列表分配给包含每一行的嵌套 NetLogo 列表的列时,可以将向量放入 data.frame 单元格中。例如,如果您想要在此 data.frame 上使用 write.table,则必须将此列标记为 class="AsIs" 。您可以使用 I(x) -function 来执行此操作。

示例:如果感兴趣的列的名称为“col1”,您可以执行 data.frame “df1” r:eval "df1$col1 <- I(df1$col1)" help(I) 从 R 终端内调用以获取更多详细信息。

加载 R 脚本

此外,您可以在 R 脚本中定义函数、加载它并使用这些函数。通过加载 R 文件 r:eval "source('<path to r-file>')"

加载包

也可以通过加载 R 包 r:eval "library(<name of package>)"

当您编译包含的代码时, extensions [r] 您将创建一个新的 R 工作区。在您重新加载扩展、打开新模型或提交原语之前 [r:clear](#rclear) ,在此会话中分配的所有 R 变量都将可用,就像您从命令行或 R 控制台中使用 R 一样。

交互式外壳

您可以通过打开交互式 R Shell r:interactiveShell 。这个 shell 是底层 R 实例的端口。此 shell 适用于全局环境(请参阅下面 R 扩展中的环境 ),而扩展本身适用于自定义本地环境。但是全局环境中有一个自动变量“nl.env”,它是对扩展本地环境的引用。不要删除这个变量!例如,
您可以通过 访问由扩展程序创建的变量。如果您想从 Interactive Shell 绘图,您应该使用包含的 JavaGD 绘图设备(请参阅 r:setPlotDevice )。您可以通过鼠标右键上下文菜单保存和加载输入的 R 命令的历史记录。 get("<variable name>",nl.env)myvar <- get("myvar",nl.env)

请阅读打开外壳后输出文本区域顶部的注释!在 Linux 操作系统上,您可能会看到来自 X11 的错误消息。请检查是否一切正常。如果是这样,您可以忽略这些消息。如果没有,请将报告发送至 bugs@ccl.northwestern.edu 打开一个问题

R 扩展中的环境

当您加载模型时,R-Extension 会创建一个新的 R 环境。当您使用 R-Extension 创建 R 变量时,该变量是在本地 R 环境中创建的。此外,来自 R-Extension 的所有调用都在这个本地环境中工作。这个新的环境概念使您能够在 BehaviorSpace Experiments 中使用扩展。因此,当您不使用交互式 Shell 或其他适用于全局环境的工具时,您不必关心环境。 <- 您可以通过使用运算符或通过执行来显式地将变量分配给全局环境 assign(<name>,<value>,envir=.GlobalEnv) 。如果您使用交互式 Shell,请在打开 Shell 后查看输出文本区域顶部的注释。

输入 help(environment) R shell 以了解有关环境的更多信息。

您可以/应该通过清除(即删除所有变量和空闲内存)本地环境 r:clearLocal 。如果您还想清除全局环境(整个工作区),请调用 r:clear .

记忆

使用 R-Extension,您可以将 R 加载到 NetLogo 的进程中。由于 R 的体系结构,两个软件共享一个系统进程,因此分配给 NetLogo 的内存。

在某些情况下,由于 Java 的堆空间,您可能会收到内存不足错误。您可以在启动 NetLogo 之前通过调整 -Xmx JVM 参数来增加堆空间(另请参阅 NetLogo 手册中有关 Windows 内存的部分 )。但在 32 位系统上,这是非常有限的。因此,如果您想要/需要使用大量 RAM,最好使用 64 位系统。您可以通过启动交互式 shell ( r:interactiveShell ) 并在其中键入: memory.size(max=F) 和来查看 R 的内存使用情况 memory.size(max=T) 。此外,您可以通过键入以下内容来检查内存限制: memory.limit()
也可以看看:

如果您通过键入 gc() 在交互式 shell 中调用垃圾收集器,您将获得有关当前内存使用情况的一些信息(另请参见 http://stat.ethz.ch/R-manual/R-patched/library/base /html/gc.html )。

如果您键入 gc(nl.env) ,您将看到用于 cons 单元格和向量的内存百分比。

不要忘记 r:gc 在删除 R 变量后调用原语,也不要忘记删除不再需要的 R 变量!查看删除变量并调用 后内存使用情况如何变化 r:gc

如果你使用了太多的内存,NetLogo 可能会突然关闭。在这种情况下,请检查是否有减少内存使用的方法。如果没有,请尝试切换到 Rserve-extension 。使用 Rserve-Extension,NetLogo 和 R 两个软件都可以独立运行。当然,一个请求的可传输数据量也有限制,但限制较少。

关于本主题的最后一点:请记住,R 是一种面向向量的语言。尽可能防止使用单个值进行大量调用,并用向量操作替换它们。这更快更稳定。

无头

从 R-Extension 版本 1.1 开始,当 NetLogo 在无头模式下运行时,可以使用扩展。例如,当您从命令行运行 BehaviorSpace 实验时就是这种情况(参见 此处 )。不同之处在于, interactiveShell 未初始化/实例化。您可以在 GUI 模式下使用您所知道的扩展,但无法打开 interactiveShell ( r:interactiveShell ) 和设置绘图设备 ( r:setPlotDevice )。但是还需要做一件事: r:stop 在无头运行 NetLogo 时必须调用 finally 来停止 R 引擎。否则 NetLogo 不会关闭,您也不会返回到命令行提示符。设置行为空间实验时,可以选择设置最终命令。这是添加的好地方 r:stop 命令。

安装中

R 扩展与 NetLogo 6 捆绑在一起。要使用它,您需要安装兼容的 R,并且可能需要配置扩展。

安装 R

标准 R 3 安装应该可以工作(有时无需配置)。从 NetLogo 6.0.2 开始,测试了以下操作系统/R 版本:

  • Mac 操作系统,R 3.3.3
  • 视窗 10,R 3.3.2
  • Ubuntu 14.04(64 位),R 3.0.2

安装 R 后,您将需要安装 rJava 软件包。R 扩展的某些功能依赖于 JavaGD 包。

要安装,请从程序列表中启动 RGui,单击菜单栏中的“Packages”项,然后单击“Install Package(s)”。选择您最喜欢的服务器并在包列表中找到“rJava”,以及“JavaGD”和/或“CommonJavaJars”(两者都是可选的)。

如果您更喜欢使用控制台,则可以通过在控制台中运行以下命令来安装相同的包(并根据它们生成的提示进行操作)。

install.packages("rJava")
install.packages("JavaGD") # Optional