netlogo:自 NetLogo 6.0.3 以来,csv 电子表格中没有“”

netlogo: no " " in csv spreadsheet since NetLogo 6.0.3

我想用语法代替“#N/A”代替计算值0,但是在NetLogo 6.0.3的csv文件中没有显示“”(这个显示⇒#N/A。我想通过将“#N/A”与Excel中的数值数据混合来计算平均值,但是#N/A显示为计算结果。如果“#N/A"显示为csv文件,可以用Excel计算。在NetLogo 6.0.1中,这是可能的。我应该用NetLogo 6.0.3做什么?

也许这对你有用。假设您启用了 csv 扩展:

extensions [ csv ]

您可以使用报告器将列表(或列表列表)中的 0 值替换为字符串值“#NA”(或者 "N/A",如果需要,但对我而言,#NA 有效Excel)。

to-report replace-zeroes [ list_ ]
  if list_ = [] [ report [] ]
  let out map [ i ->
    ifelse-value is-list? i 
    [ replace-zeroes i ]
    [ ifelse-value ( i != 0 ) [ i ] [ "#NA" ] ]
  ] list_
  report out
end

快速检查:

to test
  ca  
  ; make fake list of lists for csv output
  let fake n-values 3 [ i -> n-values 5 [ random 4 ] ]

  ; replace the 0 values with the NA values
  let replaced replace-zeroes fake

  ; print both the base and 0-replaced lists
  print fake
  print replaced

  ; export to csv
  csv:to-file "replaced_out.csv" replaced
  reset-ticks
end

观察者输出(随机):

[[0 0 2 2 0] [3 0 0 3 0] [2 3 2 3 1]]
[[#NA #NA 2 2 #NA] [3 #NA #NA 3 #NA] [2 3 2 3 1]]

Excel 输出:

"correct" 方法是在 excel 中通过忽略平均值中的 N/A 来处理它。这样,您将这些值保留为 N/As,因此必须注意如何处理它们。您可以通过使用 =AVERAGE(IF(ISNUMBER(A2:A5), A2:A5)) 之类的东西计算平均值,然后使用 ctrl+shift+enter 而不是直接输入来执行此操作。这当然有点烦人。

要在 netlogo 端解决它,报告值 "\"#N/A\"" 而不是 "#N/A"。这将在您导入 excel 时保留引号。或者,您可以输出除 "#N/A" 之外的几乎任何其他字符串。例如,报告 "not-a-number" 会使它成为一个字符串,或者甚至只是使用一个空字符串。您在 excel 中看到的引号实际上是字符串的一部分,而不仅仅是该字段是字符串的指示符。通常,CSV 中的字段没有类型。 Excel 只是将其解释为数字。它将 #N/A 的确切字段视为特殊字段,因此以任何方式对其进行修改(不仅仅是在其周围添加引号)都会阻止它以这种特殊方式进行解释。

还值得注意的是,这是以前版本的 NetLogo 中的一个错误(我假设您在这里使用的是 BehaviorSpace;CSV 扩展一直以这种方式工作)。如果字符串的开头和结尾没有引号,就无法输出字符串。也就是说,字符串值本身会有引号。此行为是修复它的结果。现在,如果你愿意,你可以输出真实的 #N/A 值,这是以前无法做到的。