Rafaela
Rafaela

Reputation: 449

How to separate values from a list using commas in netlogo?

Situation: I have a code that exports turtle coordinates according to the code below:

to path
  file-open (word fileName ".csv")
  file-print (word self xcor " " ycor)
  file-close
end

The result is something like:

(turtle 1)[1 1 1 1 1 2] [4 4 4 2 1 5]

Question: How can I export this same list, but with its items separated by commas? From [1 2 1 1 1] to [1,2,1,1,1], for example.

Thanks in advance

Upvotes: 0

Views: 153

Answers (1)

Luke C
Luke C

Reputation: 10301

If you are trying to process this in R or something after the fact, I'd recommend potentially reporting in long format (ie, each line indicates a turtle, a tick [or similar], and the coordinates)- I find it simpler to process.

To answer your actual question- one way would be to manually collapse each list of coordinates into a string separated by commas. For example, see the toy model below.

Simple setup:

extensions [csv]

globals [ test ]

turtles-own [ xcor-list ycor-list ]

to setup 
  ca
  crt 10 [
    set xcor-list []
    set ycor-list []
  ]
  repeat 5 [
    ask turtles [
      rt random 90 - 45
      fd 1
      set xcor-list lput pxcor xcor-list
      set ycor-list lput pycor ycor-list
    ]
  ]    
  reset-ticks
end

This reporter is what's actually doing the work of collapsing the list into a simple string for output:

to-report collapse-string-list [str-list]
  report reduce word ( sentence map [ str -> word str ", " ] but-last str-list last str-list )
end

And this chunk pulls the desired turtle variables into a list of lists, calls the collapse-string-list reporter on them, then exports to a csv:

to output-coord-file
  let all-turtles sort turtles
  
  ; Pull coordinates from each turtle
  let who-coord-list map [ 
    current-turtle ->
    (list 
      [who] of current-turtle 
      collapse-string-list [xcor-list] of current-turtle
      collapse-string-list [ycor-list] of current-turtle
  )] all-turtles
  
  ; Add headers
  set who-coord-list fput ["who" "x" "y"] who-coord-list
  
  ; Export
  csv:to-file "toy.csv" (map [ row -> (map [i -> (word i)] row ) ] who-coord-list)
end

Output:

enter image description here

Upvotes: 1

Related Questions