Netlogo:如何使用行索引和列索引进行子集化

Netlogo: How to subset with row and column indexes

有人可以帮我写一下 Netlogo 中读取数据的代码吗?我试图在多个列表中选择一个元素将其作为变量分配给海龟(我从 csv 文件中读取矩形 table 中的数据)。

在我当前的代码中,它按照我的意愿读取,但问题是它只读取最后一行的元素,而不是迭代读取所有行的元素(跨列)。我需要的是一次读取每一行的一个元素。

here are some rows of my data

这是我目前尝试过的方法:

let residents-file "mock-data.csv"
  let residents-list []
  set residents-list csv:from-file residents-file
  
  
  foreach residents-list [ ?1 ->
    let hh-col ?1row
    let residents-to-create 1 
    
    create-residents residents-to-create [ setxy random-xcor random-ycor ]    
    ask residents [ 
      set shape "person"
      set color 9
      set ID item 0 hh-col
      set occupancy item 1 hh-col]]

看起来问题是您正在使用 create-residents 创建 n 个居民,然后询问 all 个居民做某事。换句话说,无论当前正在处理哪一行,都会要求所有现有居民(无论是在本次迭代中创建还是在之前的迭代中创建)从当前迭代中正在处理的行中提取值。

解决此问题的最简单方法可能只是让每个居民提取值作为它正在创建。

使用这个玩具版本的数据集:

id  occupancy
1   owner
2   renter
3   owner
4   renter
5   owner

这是一个简化的例子:

breed [ residents resident ]
residents-own [ id occupancy ]

extensions [csv]

to setup
  ca
  let residents-file "mock-data.csv"
  let residents-list but-first csv:from-file residents-file
  
  foreach residents-list [ cur-row ->
    create-residents 1 [
      set id item 0 cur-row
      set occupancy item 1 cur-row
    ]
  ]
  
  ask residents [
    print ( word "My who is " who ", my id is " id ", and my occupancy is " occupancy )
  ]
    
  reset-ticks
end

输出应该类似于: