在 .csv 文件中,我有两列,年龄和生育率,当然代表按年龄划分的生育率。我如何使用 .csv 文件中的信息根据年龄为每只海龟创建变量“生育率”?
可能(并希望)答案真的很微不足道,我对 NetLogo 还是很陌生,提前感谢您的回答。
我尝试导入数据并将其用作表格,但我不知道从那时起该怎么做。
extensions [csv]
globals [mortality-table]
to setup
set mortality-table csv:from-file "path-to-the-file"
end
当然,一个答案是简单地手动引入每个年龄段的生育率,但我相信应该存在一个不那么乏味的答案。
再次感谢大家的帮助
你很接近......(请注意我没有测试这段代码)。
您可以使用 table:from-list 直接从列表创建表格,也可以使用 csv:from-file 从 CSV 文件创建该列表。使用以下方法一次完成所有操作:
set mortality-table table:from-list (csv:from-file "path-to-file")
(但也许你的意思是“生育表”?)
然后你需要告诉每只海龟得到它的生育率:
ask turtles
[ set fertility-rate table:get fertility-table my-age ]
所以,你的想法很好;您只需要仔细阅读表格扩展的用户手册,以了解具体操作方法。
最后,我找到了如下解决方法,这在很大程度上要感谢 Steve Railsback,这可能对将来的某些人有帮助:
extensions [ table ]
globals [fertility-table] ;; We create the global table "fertility table" the left column is age
;; and the right column is fertility rate for that age
turtles-own [age fertility-rate ]
to setup
clear-all
setup-globals
create-turtles 200 [ setxy random-xcor random-ycor ;; We just create some turtles and spread them
set age random 100 ;; with randome ages comprised from0 to 100
carefully [ set fertility-rate table:get fertility-table age ] ;; We ask to link the age with the
;; values in the fertility-table global
[ set fertility-rate 0 ;; set a default value if the age is not present in the table
]]
reset-ticks
end
to setup-globals
;; First we configure the fertility global, to do so we create to "columns" fertility-list and age-fertility
;; I'ts not such a hustle to create this list if we are working on a wide-format spreadsheet, just copy and paste
let fertility-list [0.001116649 0.002047191 0.003948731 0.006699896 0.010802369 0.013602084 0.016571724 0.01888594 0.021976955 0.025707211 0.029324184 0.033653224 0.038718604 0.045968734 0.052984205 0.060711743 0.066837131 0.070065704 0.071336095 0.07165167 0.068463555 0.0616261 0.053550621 0.044415135 0.034988348 0.025958053 0.018287157 0.011959477 0.007144938 0.004644614 0.002751165 0.001480774 0.000865808 0.000542141 0.000712066]
let age-fertility [15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]
;; Now we just create a table from this lists using the primitive from-list and map
set fertility-table table:from-list (map list age-fertility fertility-list)
end
它不是那么漂亮......但它现在有效¡