我正在使用 netlogo 开发一个在运行期间必须与 R 通信的模型。我使用 netlogo 中的 r 扩展名(而不是 R 中的 Rnetlogo)来执行此操作。
在设置中,我用
r:eval "source('C:/Users/keemi/OneDrive/Documenten/Thesis/heatpumps/scriptHeatpumpV1.R')"
这个加载我的脚本很好,因为我可以用这个代码询问我想要从脚本中得到什么。r:get "cpquery(fittedHeatpumpv1, event = (Reliability == 0.88), evidence = (Economic == 0.08))"
鉴于证据,这给了我事件的机会百分比。
然而,证据必须来自 netlogo 网络,我这样做
r:put "economicvalue" reliability
是在 r ->economicvalue 中创建一个变量,该变量来自 netlogo 中的可靠性值(示例中为 0.08)。然后我输入以下代码r:get "cpquery(fittedHeatpumpv1, event = (Reliability == 0.88), evidence = (Economic == economicvalue))"
以获得相同的结果,但是 netlogo 给出了错误
Extension exception: Error in R-Extension: Error in Get.
org.nlogo.api.ExtensionException: Error in eval(evidence, generated.data, parent.frame()) :
object 'economicvalue' not found
error while company 157 running R:GET
called by procedure INVEST
called by procedure GO
called by Button 'go-once'
这很奇怪,因为如果我在 r 本身做同样的事情,它工作得很好。并且脚本本身也可以正常工作,因为我可以从中加载内容。我还检查了 r:put 的值,如果我使用它回调它,它确实设置为 0.08r:get "economicvalue"
我也已经在没有来自 netlogo 的变量的情况下对其进行了测试,但只是将命令直接提供给 r usingr:eval "economicvalue <- 0.08"
但会发生相同的错误。
我无法弄清楚我在这里做错了什么,因为如果我放置相同的代码行但不是来自 netlogo,代码本身可以在 r 中运行,并且 netlogo 也表现良好,因为我可以查看 r 命令是否与r:get
and一起使用这一切都给出了正确的价值观。
有人可以帮帮我吗?