NetLogo导出文件时如何调整去掉energy-of-my-agent字段的方括号[]
问题根因
你导出的energy-of-my-agent列带方括号,核心原因是my-agent变量存储的是代理集合类型而非单个代理:
你在setup阶段给patches的my-agent赋值时用的是set my-agent turtles-here,turtles-here返回的永远是海龟集合,哪怕该patch上只有1只海龟。后续你用[energy] of my-agent取值时,返回的是包含单个数值的列表,NetLogo把列表转为字符串输出时会自动带上方括号。
解决方案
有两种修改方式,选任意一种即可:
方案1:从根源修正my-agent的类型(更推荐)
修改setup阶段给my-agent赋值的代码,把集合转为单个代理:
ask patches [ sprout 1 set patch-id [ who ] of turtles-here ;; 新增one-of,从单元素集合里取出单个海龟 set my-agent one-of turtles-here ]
修改后my-agent就是单个海龟,[energy] of my-agent返回的就是纯数值,导出自然没有方括号。
方案2:输出前提取列表里的数值(不改动原有赋值逻辑)
如果不想修改之前的my-agent赋值逻辑,可以在取值/输出时用first函数提取列表的首个(也是唯一一个)元素:
可以修改go阶段给energy-of-my-agent赋值的代码:
ask patches [ ;; 新增first,取出列表里的数值 set energy-of-my-agent first ([energy] of my-agent) if output-data? [ if ticks mod output-every-n-ticks = 0 [ write-output-data energy-of-my-agent pxcor pycor ] ] ]
也可以在调用write-output-data时处理参数:
write-output-data (first energy-of-my-agent) pxcor pycor
修改完成后重新运行模型,导出的CSV里energy-of-my-agent列就不会再有多余的方括号了。
内容的提问来源于stack exchange,提问作者Rafaela
相关产品推荐
相关产品推荐

