Equal Interval

library(data.table)
library(glue)

source("R/fun_wt_vals.R")
source("R/fun_read_config.R")
source("R/fun_dist_disp.R")
source("R/fun_link_landscape.R")

read data

paths = list.dirs(path = "data", recursive = F)
paths = paths[grep("sim", paths)]
# summarise data over a loop, no saving to ram
for (path in paths) {

  # which data to read
  lt_data = glue("{path}/00250_pos.csv")
  data = fread(lt_data)

  param = read_config(path)

  # round tstep to nearest 1000
  data[, day := cumsum(t %% 100 == 0), by = "id"]
  data[, interval := cumsum(t %% 1000 == 0), by = "id"]

  # link environmental data
  # data = split(data, by = "interval")

  # over list, read and link landscape
  # land_files = list.files(path, pattern = "t0", full.names = T)
  # names(land_files) = names(data)

  prod = "data/data_parameters/kernels32.png"
  prod = read_landscape(prod, layer = 1, value_name = "cell_r")

  # add item and agent data
  # data = Map(
  #   function(df, land) {
  #     # items = read_landscape(land, layer = 4, value_name = "items")
  #     # agents = read_landscape(land, layer = c(1, 2, 3), value_name = "agents")
  #     # df = link_landscape(df, items)
  #     # df = link_landscape(df, agents)
  #     df = link_landscape(df, prod)
  #   },
  #   data, land_files
  # )

  data = link_landscape(data, prod)

  # data = rbindlist(data)

  data = data[, list(paths = list(.SD)), by = c("id", "day", "interval")]
  data[, c("displacement", "distance") := list(
    vapply(paths, get_displacement, FUN.VALUE = 1.0),
    vapply(paths, get_distance, FUN.VALUE = 1L)
  )]

  # summarise items, agents, and cell_r
  data[, c("mean_r") := lapply(paths, function(df) {

    # multiple summarise
    df_ = melt(df[, c("x", "y", "cell_r")], 
               id.vars = c("x", "y"))[, list(
                 mean_val = mean(value)
               ), by = "variable"]

    mv_ = df_$mean_val
    names(mv_) = df_$variable

    mv_
  }) |>
    transpose()
  ]

  # read weights
  wt_data = get_wt_data(
    path, gen_start = 250, gen_end = 250, gen_step = 1, 
    n_agents = 100, gen_add = NULL
  )

  # add id
  wt_data[, id := seq_len(100) - 1]

  # link weights
  data = merge(data, wt_data)

  data$paths = NULL

  setorder(data, id, day, interval)

  if (!dir.exists("data/lt_tracks")) {
    dir.create("data/lt_tracks")
  } else {
    data[, names(param) := list(param["growth"], param["type"], param["rep_"])]
    fwrite(
      data,
      glue("data/lt_tracks/data_lt_summary_{param['growth']}_{param['type']}_{param['rep_']}.csv")
    )
  }

}


pratikunterwegs/process-pattern documentation built on Dec. 22, 2021, 9:50 a.m.