The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Getting Started with perumammals

Paul Efren Santos Andrade

2025-12-19

Introduction

The perumammals package provides tools for working with Peru’s mammalian biodiversity. It includes a curated taxonomic backbone based on Pacheco et al. (2021), the most comprehensive and up-to-date synthesis of Peruvian mammal diversity.

This vignette will show you how to:

Installation

You can install the development version of perumammals from GitHub:

# Using pak (recommended)
pak::pak("PaulESantos/perumammals")

# Or using remotes
remotes::install_github("PaulESantos/perumammals")

Loading the package

library(perumammals)

Available dataset

The main dataset included in the package is the species list provided as an appendix in Pacheco et al. (2021):

# Main species backbone
data(peru_mammals)
head(peru_mammals)
#>       pm_id        order          family        genus     species
#> 1 M0542_EUB Artiodactyla      Balaenidae    Eubalaena   australis
#> 2 M0543_BAL Artiodactyla Balaenopteridae Balaenoptera bonaerensis
#> 3 M0544_BAL Artiodactyla Balaenopteridae Balaenoptera    borealis
#> 4 M0545_BAL Artiodactyla Balaenopteridae Balaenoptera       edeni
#> 5 M0546_BAL Artiodactyla Balaenopteridae Balaenoptera    musculus
#> 6 M0547_BAL Artiodactyla Balaenopteridae Balaenoptera    physalus
#>            scientific_name                      scientific_name_full
#> 1      Eubalaena australis    Eubalaena australis (Desmoulins, 1822)
#> 2 Balaenoptera bonaerensis Balaenoptera bonaerensis Burmeister, 1867
#> 3    Balaenoptera borealis        Balaenoptera borealis Lesson, 1828
#> 4       Balaenoptera edeni         Balaenoptera edeni Anderson, 1879
#> 5    Balaenoptera musculus    Balaenoptera musculus (Linnaeus, 1758)
#> 6    Balaenoptera physalus    Balaenoptera physalus (Linnaeus, 1758)
#>               author                     common_name endemic ecoregions
#> 1 (Desmoulins, 1822)          Ballena franca del sur   FALSE        OCE
#> 2   Burmeister, 1867           Ballena minke austral   FALSE        OCE
#> 3       Lesson, 1828                  Ballena de Sei   FALSE        OCE
#> 4     Anderson, 1879                Ballena de Bryde   FALSE        OCE
#> 5   (Linnaeus, 1758)   Rorcual gigante, ballena azul   FALSE        OCE
#> 6   (Linnaeus, 1758) Rorcual común, ballena de aleta   FALSE        OCE
#>               reference
#> 1            Reyes 2009
#> 2            Reyes 2009
#> 3 Jefferson et al. 1993
#> 4            Reyes 2009
#> 5 Jefferson et al. 1993
#> 6 Jefferson et al. 1993

Basic name validation

The core function validate_peru_mammals() checks if species names are present in the Peruvian mammal checklist:

# Single species
species_list <- c(
  "Puma concolor",           # Valid name
  "Tremarctos ornatus",      # Valid name  
  "Panthera onca",           # Valid name
  "Lycalopex sechurae",      # Valid name
  "Odocoileus virginianus",  # Valid name
  "Puma concolar"            # Misspelled
)

results <- validate_peru_mammals(species_list)
results
#>   sorter              Orig.Name       Matched.Name            Match.Level
#> 1      1          Puma concolor      Puma concolor             Exact rank
#> 2      2     Tremarctos ornatus Tremarctos ornatus             Exact rank
#> 3      3          Panthera onca      Panthera onca             Exact rank
#> 4      4     Lycalopex sechurae Lycalopex sechurae             Exact rank
#> 5      5 Odocoileus virginianus         Odocoileus Matched at higher rank
#> 6      6          Puma concolar      Puma concolor             Exact rank
#>   matched Rank Matched.Rank Comp.Rank valid_rank Orig.Genus Orig.Species Author
#> 1    TRUE    2            2      TRUE       TRUE       PUMA     CONCOLOR       
#> 2    TRUE    2            2      TRUE       TRUE TREMARCTOS      ORNATUS       
#> 3    TRUE    2            2      TRUE       TRUE   PANTHERA         ONCA       
#> 4    TRUE    2            2      TRUE       TRUE  LYCALOPEX     SECHURAE       
#> 5   FALSE    2            1     FALSE      FALSE ODOCOILEUS  VIRGINIANUS       
#> 6    TRUE    2            2      TRUE       TRUE       PUMA     CONCOLAR       
#>   Matched.Genus Matched.Species genus_dist species_dist    scientific_name
#> 1          PUMA        CONCOLOR          0            0      Puma concolor
#> 2    TREMARCTOS         ORNATUS          0            0 Tremarctos ornatus
#> 3      PANTHERA            ONCA          0            0      Panthera onca
#> 4     LYCALOPEX        SECHURAE          0            0 Lycalopex sechurae
#> 5    ODOCOILEUS            <NA>          0           NA               <NA>
#> 6          PUMA        CONCOLOR          0            1      Puma concolor
#>                       common_name  family     order endemic
#> 1        Puma, león, lluichu-puma Felidae Carnivora   FALSE
#> 2 Oso de anteojos, ucumari, ucucu Ursidae Carnivora   FALSE
#> 3      Jaguar, otorongo, uturuncu Felidae Carnivora   FALSE
#> 4                Zorro de Sechura Canidae Carnivora   FALSE
#> 5                            <NA>    <NA>      <NA>      NA
#> 6        Puma, león, lluichu-puma Felidae Carnivora   FALSE

Quick checks with wrapper functions

Check if species occur in Peru

# Returns TRUE/FALSE
is_peru_mammal(species_list)
#> [1] "Found in Peru" "Found in Peru" "Found in Peru" "Found in Peru"
#> [5] "Not found"     "Found in Peru"

Identify endemic species

# Check which species are endemic to Peru
species_list <- c("Thomasomys notatus", "Tremarctos ornatus", "Eptesicus mochica", "Puma concolar")

is_endemic_peru(species_list)
#> [1] "Endemic to Peru" "Not endemic"     "Endemic to Peru" "Not endemic"

# Get endemic status as character
endemic_status <- ifelse(
  is_endemic_peru(species_list) == "Endemic to Peru",
  "Endémica",
  "No endémica"
)
endemic_status
#> [1] "Endémica"    "No endémica" "Endémica"    "No endémica"

Check match quality

# Get match quality levels
match_quality_peru(species_list)
#> [1] "Exact" "Exact" "Exact" "Fuzzy"

Working with data frames

The validation functions integrate smoothly with data frames and the tidyverse:

library(dplyr)

# Create a sample dataset
my_data <- tibble(
  species = species_list,
  abundance = c(5, 3, 2, 8)
)

# Add validation results
my_data_validated <- my_data |> 
  mutate(
    in_peru = is_peru_mammal(species),
    endemic = is_endemic_peru(species),
    match_quality = match_quality_peru(species)
  )

my_data_validated
#> # A tibble: 4 × 5
#>   species            abundance in_peru       endemic         match_quality
#>   <chr>                  <dbl> <chr>         <chr>           <chr>        
#> 1 Thomasomys notatus         5 Found in Peru Endemic to Peru Exact        
#> 2 Tremarctos ornatus         3 Found in Peru Not endemic     Exact        
#> 3 Eptesicus mochica          2 Found in Peru Endemic to Peru Exact        
#> 4 Puma concolar              8 Found in Peru Not endemic     Fuzzy

Exploring taxonomic families

List all families

# Get summary of all families
families <- pm_list_families()
families
#> # A tibble: 51 × 5
#>    order        family          n_genera n_species n_endemic
#>    <chr>        <chr>              <int>     <int>     <int>
#>  1 Artiodactyla Balaenidae             1         1         0
#>  2 Artiodactyla Balaenopteridae        2         6         0
#>  3 Artiodactyla Camelidae              2         4         0
#>  4 Artiodactyla Cerevidae              5         8         0
#>  5 Artiodactyla Delphinidae           13        17         0
#>  6 Artiodactyla Iniidae                1         1         0
#>  7 Artiodactyla Phocoenidae            1         1         0
#>  8 Artiodactyla Physeteridae           2         3         0
#>  9 Artiodactyla Tayassuidae            2         2         0
#> 10 Artiodactyla Ziphiidae              2         3         0
#> # ℹ 41 more rows

# Families with highest species richness
families |> 
  arrange(desc(n_species)) |> 
  head(10)
#> # A tibble: 10 × 5
#>    order           family           n_genera n_species n_endemic
#>    <chr>           <chr>               <int>     <int>     <int>
#>  1 Rodentia        Cricetidae             40       137        47
#>  2 Chiroptera      Phyllostomidae         38       107         3
#>  3 Didelphimorphia Didelphidae            15        47        10
#>  4 Chiroptera      Molossidae              9        30         3
#>  5 Chiroptera      Vespertilionidae        4        25         3
#>  6 Primates        Cebidae                 6        23         4
#>  7 Rodentia        Echimyidae              8        20         3
#>  8 Artiodactyla    Delphinidae            13        17         0
#>  9 Chiroptera      Emballonuridae          7        14         0
#> 10 Primates        Pitheciidae             3        12         4

Filter by family

# Get summary for bat species (Phyllostomidae)
pm_list_families() |> 
  filter(family == "Phyllostomidae")
#> # A tibble: 1 × 5
#>   order      family         n_genera n_species n_endemic
#>   <chr>      <chr>             <int>     <int>     <int>
#> 1 Chiroptera Phyllostomidae       38       107         3

# Get species list for a specific family
 pm_species(family = "Phyllostomidae")
#> # A tibble: 107 × 5
#>    order      family         genus    species       scientific_name       
#>    <chr>      <chr>          <chr>    <chr>         <chr>                 
#>  1 Chiroptera Phyllostomidae Anoura   aequatoris    Anoura aequatoris     
#>  2 Chiroptera Phyllostomidae Anoura   caudifer      Anoura caudifer       
#>  3 Chiroptera Phyllostomidae Anoura   cultrata      Anoura cultrata       
#>  4 Chiroptera Phyllostomidae Anoura   fistulata     Anoura fistulata      
#>  5 Chiroptera Phyllostomidae Anoura   geoffroyi     Anoura geoffroyi      
#>  6 Chiroptera Phyllostomidae Anoura   javieri       Anoura javieri        
#>  7 Chiroptera Phyllostomidae Anoura   latidens      Anoura latidens       
#>  8 Chiroptera Phyllostomidae Anoura   peruana       Anoura peruana        
#>  9 Chiroptera Phyllostomidae Artibeus aequatorialis Artibeus aequatorialis
#> 10 Chiroptera Phyllostomidae Artibeus anderseni     Artibeus anderseni    
#> # ℹ 97 more rows

Analyzing endemic species

Get endemic species list

# List all endemic species
endemic_mammals <- pm_species(endemic = TRUE)
endemic_mammals
#> # A tibble: 87 × 5
#>    order      family           genus         species   scientific_name     
#>    <chr>      <chr>            <chr>         <chr>     <chr>               
#>  1 Chiroptera Molossidae       Eumops        chiribaya Eumops chiribaya    
#>  2 Chiroptera Molossidae       Mormopterus   phrudus   Mormopterus phrudus 
#>  3 Chiroptera Molossidae       Tomopeas      ravus     Tomopeas ravus      
#>  4 Chiroptera Phyllostomidae   Anoura        javieri   Anoura javieri      
#>  5 Chiroptera Phyllostomidae   Hsunycteris   dashe     Hsunycteris dashe   
#>  6 Chiroptera Phyllostomidae   Micronycteris matses    Micronycteris matses
#>  7 Chiroptera Vespertilionidae Eptesicus     mochica   Eptesicus mochica   
#>  8 Chiroptera Vespertilionidae Lasiurus      arequipae Lasiurus arequipae  
#>  9 Chiroptera Vespertilionidae Myotis        bakeri    Myotis bakeri       
#> 10 Cingulata  Dasypodidae      Dasypus       pilosus   Dasypus pilosus     
#> # ℹ 77 more rows

# Endemic species by family
endemic_mammals |> 
  group_by(family) |> 
  summarise(n_species = n_distinct(scientific_name)) |> 
  arrange(desc(n_species)) |> 
  head(10)
#> # A tibble: 10 × 2
#>    family           n_species
#>    <chr>                <int>
#>  1 Cricetidae              47
#>  2 Didelphidae             10
#>  3 Cebidae                  4
#>  4 Pitheciidae              4
#>  5 Echimyidae               3
#>  6 Molossidae               3
#>  7 Phyllostomidae           3
#>  8 Vespertilionidae         3
#>  9 Abrocomidae              2
#> 10 Soricidae                2

Endemic species by ecoregion

# Compare endemism across ecoregions
endemic_rate <- pm_list_ecoregions(include_endemic = TRUE)
#> ── Peruvian Mammal Ecoregions (Brack-Egg, 1986) ────────────────────────────────
#> ℹ Number of ecoregions: 10
#> ℹ Total mammal species in Peru: 573
#> 
#> Ecoregions by species richness:
#> 
#> SB - Selva Baja: 320 species (55.8%), 18 endemic (5.6%)
#> YUN - Yungas: 256 species (44.7%), 48 endemic (18.8%)
#> SP - Sabana de Palmera: 83 species (14.5%), 0 endemic (0%)
#> BSE - Bosque Seco Ecuatorial: 81 species (14.1%), 4 endemic (4.9%)
#> VOC - Vertiente Occidental: 72 species (12.6%), 15 endemic (20.8%)
#> PUN - Puna: 71 species (12.4%), 14 endemic (19.7%)
#> BPP - Bosque Pluvial del Pacífico: 69 species (12%), 0 endemic (0%)
#> COS - Costa: 66 species (11.5%), 16 endemic (24.2%)
#> OCE - Oceánica: 30 species (5.2%), 0 endemic (0%)
#> PAR - Páramo: 26 species (4.5%), 4 endemic (15.4%)
#> 
#> Use pm_by_ecoregion() to filter species by ecoregion
#> ────────────────────────────────────────────────────────────────────────────────
endemic_rate
#> # A tibble: 10 × 6
#>    ecoregion_code ecoregion_label    n_species n_endemic pct_species pct_endemic
#>    <chr>          <chr>                  <int>     <int>       <dbl>       <dbl>
#>  1 SB             Selva Baja               320        18        55.8         5.6
#>  2 YUN            Yungas                   256        48        44.7        18.8
#>  3 SP             Sabana de Palmera         83         0        14.5         0  
#>  4 BSE            Bosque Seco Ecuat…        81         4        14.1         4.9
#>  5 VOC            Vertiente Occiden…        72        15        12.6        20.8
#>  6 PUN            Puna                      71        14        12.4        19.7
#>  7 BPP            Bosque Pluvial de…        69         0        12           0  
#>  8 COS            Costa                     66        16        11.5        24.2
#>  9 OCE            Oceánica                  30         0         5.2         0  
#> 10 PAR            Páramo                    26         4         4.5        15.4

# Endemic species in Yungas
pm_by_ecoregion(ecoregion = "YUN", endemic = TRUE)
#> # A tibble: 48 × 5
#>    order           family         genus       species     scientific_name      
#>    <chr>           <chr>          <chr>       <chr>       <chr>                
#>  1 Chiroptera      Molossidae     Mormopterus phrudus     Mormopterus phrudus  
#>  2 Chiroptera      Phyllostomidae Anoura      javieri     Anoura javieri       
#>  3 Cingulata       Dasypodidae    Dasypus     pilosus     Dasypus pilosus      
#>  4 Didelphimorphia Didelphidae    Marmosa     andersoni   Marmosa andersoni    
#>  5 Didelphimorphia Didelphidae    Marmosa     parda       Marmosa parda        
#>  6 Didelphimorphia Didelphidae    Marmosops   juninensis  Marmosops juninensis 
#>  7 Didelphimorphia Didelphidae    Monodelphis gardeni     Monodelphis gardeni  
#>  8 Didelphimorphia Didelphidae    Philander   nigratus    Philander nigratus   
#>  9 Eulipotyphla    Soricidae      Cryptotis   evaristoi   Cryptotis evaristoi  
#> 10 Eulipotyphla    Soricidae      Cryptotis   peruviensis Cryptotis peruviensis
#> # ℹ 38 more rows

Ecoregion analysis

Species distribution across ecoregions


# Count species per ecoregion
pm_list_ecoregions()
#> ── Peruvian Mammal Ecoregions (Brack-Egg, 1986) ────────────────────────────────
#> ℹ Number of ecoregions: 10
#> ℹ Total mammal species in Peru: 573
#> 
#> Ecoregions by species richness:
#> 
#> SB - Selva Baja: 320 species (55.8%)
#> YUN - Yungas: 256 species (44.7%)
#> SP - Sabana de Palmera: 83 species (14.5%)
#> BSE - Bosque Seco Ecuatorial: 81 species (14.1%)
#> VOC - Vertiente Occidental: 72 species (12.6%)
#> PUN - Puna: 71 species (12.4%)
#> BPP - Bosque Pluvial del Pacífico: 69 species (12%)
#> COS - Costa: 66 species (11.5%)
#> OCE - Oceánica: 30 species (5.2%)
#> PAR - Páramo: 26 species (4.5%)
#> 
#> Use pm_by_ecoregion() to filter species by ecoregion
#> Use include_endemic = TRUE to see endemic species counts
#> ────────────────────────────────────────────────────────────────────────────────

Species with widest distribution

# Species occurring in most ecoregions
peru_mammals_ecoregions |> 
  count(scientific_name, name = "n_ecoregions") |> 
  arrange(desc(n_ecoregions)) |> 
  top_n(10)
#> Selecting by n_ecoregions
#> # A tibble: 12 × 2
#>    scientific_name          n_ecoregions
#>    <chr>                           <int>
#>  1 Puma concolor                       8
#>  2 Desmodus rotundus                   7
#>  3 Molossus molossus                   7
#>  4 Odocoileus peruvianus               7
#>  5 Conepatus semistriatus              6
#>  6 Lasiurus blossevillii               6
#>  7 Leopardus pardalis                  6
#>  8 Mazama americana                    6
#>  9 Myotis keaysi                       6
#> 10 Myotis nigricans                    6
#> 11 Rhipidomys leucodactylus            6
#> 12 Tamandua tetradactyla               6

Practical examples

Example 1: Data cleaning workflow

# Messy species list from field observations
field_data <- tibble(
  location = c("Manu", "Tambopata", "Paracas", "Cusco", "Lima"),
  species_name = c(
    "puma concolor",           # lowercase
    "Tremarctos ornatu",       # missing 's'
    "Otaria flavescens",       # marine mammal
    "Lycalopex sechure",       # missing 'ae'
    "Unknown bat"              # invalid
  ),
  count = c(2, 1, 15, 3, 8)
)

# Validate and clean
field_data_clean <- field_data %>%
  mutate(
    # Validate names
    validated = validate_peru_mammals(species_name)$Matched.Name,
    # Check if in Peru
    in_checklist = is_peru_mammal(species_name),
    # Get match quality
    quality = match_quality_peru(species_name)
  )

field_data_clean
#> # A tibble: 5 × 6
#>   location  species_name      count validated          in_checklist  quality  
#>   <chr>     <chr>             <dbl> <chr>              <chr>         <chr>    
#> 1 Manu      puma concolor         2 Puma concolor      Found in Peru Exact    
#> 2 Tambopata Tremarctos ornatu     1 Tremarctos ornatus Found in Peru Fuzzy    
#> 3 Paracas   Otaria flavescens    15 Otaria flavescens  Found in Peru Exact    
#> 4 Cusco     Lycalopex sechure     3 Lycalopex sechurae Found in Peru Fuzzy    
#> 5 Lima      Unknown bat           8 ---                Not found     Not found

Example 2: Endemic species summary

# Get all endemic mammals
endemic_species <- pm_species(endemic = TRUE)
endemic_species
#> # A tibble: 87 × 5
#>    order      family           genus         species   scientific_name     
#>    <chr>      <chr>            <chr>         <chr>     <chr>               
#>  1 Chiroptera Molossidae       Eumops        chiribaya Eumops chiribaya    
#>  2 Chiroptera Molossidae       Mormopterus   phrudus   Mormopterus phrudus 
#>  3 Chiroptera Molossidae       Tomopeas      ravus     Tomopeas ravus      
#>  4 Chiroptera Phyllostomidae   Anoura        javieri   Anoura javieri      
#>  5 Chiroptera Phyllostomidae   Hsunycteris   dashe     Hsunycteris dashe   
#>  6 Chiroptera Phyllostomidae   Micronycteris matses    Micronycteris matses
#>  7 Chiroptera Vespertilionidae Eptesicus     mochica   Eptesicus mochica   
#>  8 Chiroptera Vespertilionidae Lasiurus      arequipae Lasiurus arequipae  
#>  9 Chiroptera Vespertilionidae Myotis        bakeri    Myotis bakeri       
#> 10 Cingulata  Dasypodidae      Dasypus       pilosus   Dasypus pilosus     
#> # ℹ 77 more rows
# Total endemic species by order
endemic_species |> 
  count(order, name = "n_endemic") |> 
  arrange(desc(n_endemic))
#> # A tibble: 6 × 2
#>   order           n_endemic
#>   <chr>               <int>
#> 1 Rodentia               56
#> 2 Didelphimorphia        10
#> 3 Chiroptera              9
#> 4 Primates                9
#> 5 Eulipotyphla            2
#> 6 Cingulata               1

Example 3: Ecoregion-specific analysis

# Focus on Selva Baja (Amazon lowlands)

selva_baja_species <- pm_by_ecoregion(ecoregion = "SB")
selva_baja_species
#> # A tibble: 320 × 5
#>    order        family      genus       species     scientific_name       
#>    <chr>        <chr>       <chr>       <chr>       <chr>                 
#>  1 Artiodactyla Cerevidae   Blastocerus dichotomus  Blastocerus dichotomus
#>  2 Artiodactyla Cerevidae   Mazama      americana   Mazama americana      
#>  3 Artiodactyla Cerevidae   Mazama      nemorivaga  Mazama nemorivaga     
#>  4 Artiodactyla Cerevidae   Odocoileus  peruvianus  Odocoileus peruvianus 
#>  5 Artiodactyla Delphinidae Sotalia     fluviatilis Sotalia fluviatilis   
#>  6 Artiodactyla Iniidae     Inia        geoffrensis Inia geoffrensis      
#>  7 Artiodactyla Tayassuidae Dicotyles   tajacu      Dicotyles tajacu      
#>  8 Artiodactyla Tayassuidae Tayassu     pecari      Tayassu pecari        
#>  9 Carnivora    Canidae     Atelocynus  microtis    Atelocynus microtis   
#> 10 Carnivora    Canidae     Speothos    venaticus   Speothos venaticus    
#> # ℹ 310 more rows

# Endemic species in Selva Baja
pm_by_ecoregion(ecoregion = "SB", endemic = TRUE) |> 
  count(family, name = "n_species") |> 
  arrange(desc(n_species))
#> # A tibble: 7 × 2
#>   family         n_species
#>   <chr>              <int>
#> 1 Cebidae                4
#> 2 Didelphidae            4
#> 3 Pitheciidae            4
#> 4 Cricetidae             2
#> 5 Phyllostomidae         2
#> 6 Echimyidae             1
#> 7 Sciuridae              1

Advanced: Fuzzy matching details

The validation algorithm uses a hierarchical matching approach:

  1. Exact match: Perfect match with accepted name
  2. Genus + fuzzy species: Genus exact, species with small differences
  3. Fuzzy genus + exact species: Species exact, genus with small differences
  4. Double fuzzy: Both genus and species with small differences
  5. No match: No acceptable match found
# Examples of different match levels
test_names <- c(
  "Puma concolor",              # Level: Exact
  "Tremarctos ornatus Cuvier",  
  "Lycalopex sechure",          # Level: Genus + fuzzy species
  "Lyclopex sechurae",          # Level: Fuzzy genus + exact species
  "Panthera onca"               # Level: Exact
)

validate_peru_mammals(test_names) |> 
  select(Orig.Name, Matched.Name, matched)
#> Warning: Found 1 name(s) with 3+ elements (likely author info or infraspecies).
#> The peru_mammals database only accepts binomial names (Genus species).
#> Please provide names WITHOUT author information or infraspecific taxa.
#> 
#> Invalid names:
#>   - 'Tremarctos ornatus cuvier'
#> 
#> These names have been marked as NOT FOUND.
#>                   Orig.Name       Matched.Name matched
#> 1             Puma concolor      Puma concolor    TRUE
#> 2 Tremarctos ornatus cuvier                ---   FALSE
#> 3         Lycalopex sechure Lycalopex sechurae    TRUE
#> 4         Lyclopex sechurae Lycalopex sechurae    TRUE
#> 5             Panthera onca      Panthera onca    TRUE

Citation

When using this package, please cite both the package and the source data:

citation("perumammals")

Package citation: Santos Andrade, P. E., & Gonzales Guillen, F. N. (2025). perumammals: Taxonomic Backbone and Name Validation Tools for Mammals of Peru.

Data source: Pacheco, V., Cadenillas, R., Zeballos, H., Hurtado, C. M., Ruelas, D., & Pari, A. (2021). Lista actualizada de la diversidad de los mamíferos del Perú y una propuesta para su actualización. Revista Peruana de Biología, 28(special issue), e21019. https://doi.org/10.15381/rpb.v28i4.21019

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.