如何在 NetLogo 中将数据从 .csv 链接到我的海龟?

问题描述 投票:0回答:2

在 .csv 文件中,我有两列,年龄和生育率,当然代表按年龄划分的生育率。我如何使用 .csv 文件中的信息根据年龄为每只海龟创建变量“生育率”?

可能(并希望)答案真的很微不足道,我对 NetLogo 还是很陌生,提前感谢您的回答。

我尝试导入数据并将其用作表格,但我不知道从那时起该怎么做。

extensions [csv]

globals [mortality-table]

to setup
  set mortality-table csv:from-file "path-to-the-file"
end 

当然,一个答案是简单地手动引入每个年龄段的生育率,但我相信应该存在一个不那么乏味的答案。

再次感谢大家的帮助

netlogo
2个回答
0
投票

你很接近......(请注意我没有测试这段代码)。

您可以使用 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 ]

所以,你的想法很好;您只需要仔细阅读表格扩展的用户手册,以了解具体操作方法。


0
投票

最后,我找到了如下解决方法,这在很大程度上要感谢 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

它不是那么漂亮......但它现在有效¡

© www.soinside.com 2019 - 2024. All rights reserved.