Skip to contents

Introduction

In many food webs, a consumer’s ability to eat a resource is limited by their relative body sizes. The infer_edgelist() function allows you to layer a numerical rule (like a predator-prey mass ratio) on top of your categorical trait matching.

Prepare Numerical Data

First, ensure your taxon data includes a numeric column for size (e.g., body mass in kg or length in cm). Here we will modify our traits dataframe

```{r-modify_traits}

Adding body mass (kg) to our traits

traits_numeric <- traits %>% mutate(body_mass = case_when( species == “polar_bear” ~ 450, species == “seal” ~ 100, species == “orca” ~ 3000, species == “cod” ~ 5, species == “plankton” ~ 0.0001, TRUE ~ 10 # Default for others ))

head(traits_numeric)


# Define the Size Rule Function

The num_size_rule argument requires a function that takes two inputs (res_size, con_size) and returns 1 (feasible) or 0 (not feasible).

``` {r-size_rule}

my_size_rule <- function(res_size, con_size) {
  ratio <- con_size / res_size
  ifelse(ratio >= 2 & ratio <= 100, 1, 0)
}

Run Inference with Size Constraints

When col_num_size is provided, the function treats it as an additional trait type. If certainty_req = "all", the interaction must satisfy all categorical matches AND the numerical size rule.

```{r-build_list}

edgelist_size <- infer_edgelist( data = traits_numeric, cat_combo_list = feeding_rules, col_taxon = “species”, col_num_size = “body_mass”, # Point to the numeric column num_size_rule = my_size_rule, # Apply our custom logic certainty_req = “all”, hide_printout = TRUE )

head(edgelist_size) ```