我有一个包含7列的csv,其中包含代表模型中不同代理的人口大小的数据。模型中的每一行都代表不同的一天,但现在这并不重要。
ones twos threes fours fives sixes sevens
1 1 1 1 1 1 1 1
0 0 1 0 1 1 1 2
2 4 5 6 1 1 1 1
4 5 6 7 1 1 2 3
我不知道如何将值分配给代理以创建人口。如果你看第一行,我应该有每个海龟品种的1。
extensions [csv]
globals [ data ]
breed[ones one]
breed[twos two]
breed[threes three]
breed[fours four]
breed[fives five]
breed[sixes six]
breed[sevens seven]
to setup
ca
set data csv:from-file "data.csv"
print data
reset-ticks
; this is where I imagine I should assign the population sizes by the csv info.
create-ones ???
create-twos
create-threes
create-fours
create-fives
create-sixes
create-sevens
end
1条答案
按热度按时间sqyvllje1#
读取带有
csv:from-file
原语的csv文件后,将得到一个标准的NetLogo列表,该列表本身包含每行的子列表。因此,您需要使用标准的NetLogo列表原语(如item
和foreach
循环)来解析数据并创建turtle。你的csv文件有太多的列,所以我将提供一个较小的数据集的例子。假设我们有一个名为
data.csv
的文件,它看起来像这样:首先,让我们尝试打印
csv:from-file
的输出,以了解NetLogo如何表示您的数据:这表明csv文件中的行和列表示为一个包含三个项的列表,每个项本身都是一个包含三个项的列表。因此,您所需要做的就是将数据视为标准的嵌套NetLogo列表,并使用与列表相关的原语来操作数据并检索必要的信息。
下面是我将如何编写您打算编写的代码:
but-first
原语删除了数据集中包含列标题的第一项,因为我们知道数据集中变量的顺序,所以不需要第一行。foreach
原语来迭代行和列,而不是为每个单元格定义单独的变量。