
peruflorads43 provides comprehensive tools for working with Peru’s official threatened plant species list as established by Supreme Decree DS 043-2006-AG (July 13, 2006). The package enables researchers, conservation practitioners, and environmental consultants to:
Install the stable version from CRAN:
install.packages("peruflorads43")Or install the development version from GitHub:
# Using pak (recommended)
pak::pak("PaulESantos/peruflorads43")
# Or using remotes
remotes::install_github("PaulESantos/peruflorads43")Check if species are threatened:
library(peruflorads43)
# Simple vector of species names
species_list <- c(
  "Cattleya maxima",           # Orchid - Endangered
  "Polylepis incana",          # Queñua tree - Vulnerable  
  "Persea americana"           # Avocado - Not threatened
)
# Check threat status
tibble::tibble(splist = species_list) |> 
  dplyr::mutate(ds43 = is_threatened_peru(splist))
#> # A tibble: 3 × 2
#>   splist           ds43          
#>   <chr>            <chr>         
#> 1 Cattleya maxima  CR            
#> 2 Polylepis incana CR            
#> 3 Persea americana Not threatenedGet comprehensive matching information:
# Detailed results with matching metadata
results <- is_threatened_peru(species_list, return_details = TRUE)
# View key columns
results |> 
  dplyr::select(Orig.Name, Matched.Name, Threat.Status, Match.Level)
#> # A tibble: 3 × 4
#>   Orig.Name        Matched.Name     Threat.Status  Match.Level
#>   <chr>            <chr>            <chr>          <chr>      
#> 1 Cattleya maxima  Cattleya maxima  CR             Exact rank 
#> 2 Polylepis incana Polylepis incana CR             Exact rank 
#> 3 Persea americana ---              Not threatened No matchCheck protection status under the official decree:
# Species with nomenclatural changes
species <- c(
  "Haageocereus acranthus subsp. olowinskianus",  # Original name (2006)
  "Brassia ocanensis",                            # Updated name (was Ada)
  "Persea americana"                              # Not threatened
)
# Consolidated search across both databases
tibble::tibble(species) |> 
dplyr::mutate(status = is_ds043_2006_ag(species))
#> # A tibble: 3 × 2
#>   species                                     status           
#>   <chr>                                       <chr>            
#> 1 Haageocereus acranthus subsp. olowinskianus VU (synonym)     
#> 2 Brassia ocanensis                           VU (updated name)
#> 3 Persea americana                            Not threatened
# Detailed reconciliation
details <- is_ds043_2006_ag(species, return_details = TRUE)
details |>
  dplyr::select(Input.Name, Consolidated.Status, Final.Source, Nomenclature.Status)
#> # A tibble: 3 × 4
#>   Input.Name                Consolidated.Status Final.Source Nomenclature.Status
#>   <chr>                     <chr>               <chr>        <chr>              
#> 1 Haageocereus acranthus s… VU (synonym)        DS 043-2006… Synonym (name upda…
#> 2 Brassia ocanensis         VU (updated name)   DS 043-2006… Name updated since…
#> 3 Persea americana          Not threatened      Not in DS 0… Not applicableThe package automatically handles misspellings and variations:
# Species with typos
species_fuzzy <- c(
  "Catleya maxima",      # Missing 't' in Cattleya
  "Polylepys incana"     # Wrong spelling of Polylepis
)
results <- is_threatened_peru(species_fuzzy, return_details = TRUE)
# Check fuzzy matching quality
results |>
  dplyr::select(Orig.Name, Matched.Name, Threat.Status, 
         fuzzy_genus_dist, fuzzy_match_genus)
#> # A tibble: 2 × 5
#>   Orig.Name        Matched.Name Threat.Status fuzzy_genus_dist fuzzy_match_genus
#>   <chr>            <chr>        <chr>                    <dbl> <lgl>            
#> 1 Catleya maxima   Cattleya ma… CR                           1 TRUE             
#> 2 Polylepys incana Polylepis i… CR                           1 TRUEWhen multiple candidates have identical match scores:
# Get ambiguous matches for quality control
ambiguous <- get_ambiguous_matches(results, type = "all")
#> No ambiguous all matches found.
# Save for manual curation
if (!is.null(ambiguous)) {
  get_ambiguous_matches(
    results, 
    type = "genus",
    save_to_file = TRUE
  )
}# Access original nomenclature
db_original <- get_threatened_database(type = "original")
# Summary statistics
get_database_summary("original")
#> # A tibble: 1 × 10
#>   Database Total_Species    CR    EN    VU    NT Families Genera
#>   <chr>            <int> <int> <int> <int> <int>    <int>  <int>
#> 1 original           776   193    73   391   119       80    290
#> # ℹ 2 more variables: Has_Infraspecies <int>, Max_Rank <dbl>Key characteristics:
# Access updated nomenclature
db_updated <- get_threatened_database(type = "updated")
# Compare with original
get_database_summary("both")
#> # A tibble: 2 × 10
#>   Database        Total_Species    CR    EN    VU    NT Families Genera
#>   <chr>                   <int> <int> <int> <int> <int>    <int>  <int>
#> 1 Original (2006)           776   193    73   391   119       80    290
#> 2 Updated                   179    44    16    93    26       30     85
#> # ℹ 2 more variables: Has_Infraspecies <int>, Max_Rank <dbl>Key characteristics: - Current taxonomic consensus (WCVP/POWO) - Supports trinomial names - Only accepted names (synonyms resolved) - Updated to 2025 nomenclature
# Side-by-side comparison
comparison <- comparison_table_ds043(species)
comparison |>
 dplyr::select(input_species, status_original, status_updated, 
         nomenclature_status, protected_by_ds_043)
#> # A tibble: 3 × 5
#>   input_species               status_original status_updated nomenclature_status
#>   <chr>                       <chr>           <chr>          <chr>              
#> 1 Haageocereus acranthus sub… VU              Not threatened Synonym (name upda…
#> 2 Brassia ocanensis           Not threatened  VU             Name updated since…
#> 3 Persea americana            Not threatened  Not threatened Not applicable     
#> # ℹ 1 more variable: protected_by_ds_043 <chr>Supreme Decree DS 043-2006-AG
Aprueban Categorización de Especies Amenazadas de Flora
Silvestre
Issued by: Ministry of Agriculture, Peru
Date: July 13, 2006
| Category | Code | Spanish | Description | 
|---|---|---|---|
| Critically Endangered | CR | En Peligro Crítico | Extremely high risk of extinction | 
| Endangered | EN | En Peligro | Very high risk of extinction | 
| Vulnerable | VU | Vulnerable | High risk of extinction | 
| Near Threatened | NT | Casi Amenazado | Close to qualifying for threatened status | 
# Species list from field survey
field_species <- c("Achyrocline saturejoides", "Bouteloua simplex", 
                   "Jarava ichu", "Cenchrus clandestinus", "Grindelia boliviana",
                   "Tagetes filifolia", "Bidens pilosa", "Cumulopuntia boliviana",
                   "Ageratina sternbergiana", "Roca", "Nassella inconspicua", 
                   "Dalea sp", "Baccharis tricuneata", "Lepechinia meyenii", 
                   "Erodium cicutarium", "Suelo", "Ephedra rupestris", 
                   "Achyrocline saturejoides", "Ageratina sternbergiana", 
                   "Astragalus garbancillo", "Baccharis tola", "Bidens pilosa",
                   "Bouteloua simplex", "Cenchrus clandestinus", 
                   "Cumulopuntia boliviana", "Jarava ichu")
tibble::tibble(field_species) |> 
  dplyr::mutate(status = is_ds043_2006_ag(field_species)) |> 
  dplyr::filter(status != "Not threatened")
#> The species list (splist) should only include binomial names. The following names were submitted at the genus level: 'ROCA', 'SUELO'
#> The species list (splist) should only include binomial names. The following names were submitted at the genus level: 'ROCA', 'SUELO'
#> # A tibble: 1 × 2
#>   field_species     status
#>   <chr>             <chr> 
#> 1 Ephedra rupestris CR
# Check DS 043 protection status
results <- is_ds043_2006_ag(field_species, return_details = TRUE)
#> The species list (splist) should only include binomial names. The following names were submitted at the genus level: 'ROCA', 'SUELO'
#> The species list (splist) should only include binomial names. The following names were submitted at the genus level: 'ROCA', 'SUELO'
results
#> # A tibble: 26 × 14
#>    Input.Name        Consolidated.Name Consolidated.Status Consolidated.Category
#>    <chr>             <chr>             <chr>               <chr>                
#>  1 Achyrocline satu… ---               Not threatened      <NA>                 
#>  2 Bouteloua simplex ---               Not threatened      <NA>                 
#>  3 Jarava ichu       ---               Not threatened      <NA>                 
#>  4 Cenchrus clandes… ---               Not threatened      <NA>                 
#>  5 Grindelia bolivi… ---               Not threatened      <NA>                 
#>  6 Tagetes filifolia ---               Not threatened      <NA>                 
#>  7 Bidens pilosa     ---               Not threatened      <NA>                 
#>  8 Cumulopuntia bol… ---               Not threatened      <NA>                 
#>  9 Ageratina sternb… ---               Not threatened      <NA>                 
#> 10 Roca              ---               Not threatened      <NA>                 
#> # ℹ 16 more rows
#> # ℹ 10 more variables: Protected.DS043 <lgl>, Is.Synonym <lgl>,
#> #   Accepted.Name <chr>, Final.Source <chr>, Match.Scenario <chr>,
#> #   Nomenclature.Status <chr>, Original.Matched <chr>, Original.Status <chr>,
#> #   Updated.Matched <chr>, Updated.Status <chr>
# Generate report 
results |>
  dplyr::filter(Protected.DS043 == TRUE) |>
  dplyr::select(Input.Name, Consolidated.Status, Final.Source)
#> # A tibble: 1 × 3
#>   Input.Name        Consolidated.Status Final.Source             
#>   <chr>             <chr>               <chr>                    
#> 1 Ephedra rupestris CR                  DS 043-2006-AG (original)# Historical species records
historical_names <- c(
  "Lycaste locusta",     # Old name
  "Ida locusta"          # Current accepted name
)
# Check nomenclatural updates
nomenclature_check <- is_ds043_2006_ag(
  historical_names, 
  return_details = TRUE
)
# Identify synonyms
nomenclature_check |>
  dplyr::filter(Is.Synonym == TRUE) |>
  dplyr::select(Input.Name, Accepted.Name, Nomenclature.Status)
#> # A tibble: 1 × 3
#>   Input.Name      Accepted.Name Nomenclature.Status   
#>   <chr>           <chr>         <chr>                 
#> 1 Lycaste locusta Ida locusta   Synonym (name updated)The algorithm implements strict rank validation to prevent false positives:
# Example: User inputs trinomial, database has binomial
# Input:  "Cattleya maxima var. alba" (Rank 3, doesn't exist)
# Database: "Cattleya maxima" (Rank 2, exists)
# Result: NO MATCH (correct) - prevents false positiveThis ensures taxonomic precision and avoids inappropriate matches.
The package automatically handles duplicate names efficiently:
# Input with duplicates
species_dup <- c(
  "Cattleya maxima", 
  "Polylepis incana", 
  "Cattleya maxima"  # Duplicate
)
results <- matching_threatenedperu(species_dup)
results
#>   sorter        Orig.Name     Matched.Name Threat.Status Author
#> 1      1  Cattleya maxima  Cattleya maxima            CR       
#> 2      2 Polylepis incana Polylepis incana            CR       
#> 3      3  Cattleya maxima  Cattleya maxima            CR       
#>   accepted_name_author Matched.Rank Comp.Rank Match.Level Orig.Genus
#> 1               Lindl.            2      TRUE  Exact rank   CATTLEYA
#> 2                Kunth            2      TRUE  Exact rank  POLYLEPIS
#> 3               Lindl.            2      TRUE  Exact rank   CATTLEYA
#>   Orig.Species Orig.Infraspecies Orig.Infraspecies_2 Rank Orig.Infra.Rank
#> 1       MAXIMA              <NA>                <NA>    2            <NA>
#> 2       INCANA              <NA>                <NA>    2            <NA>
#> 3       MAXIMA              <NA>                <NA>    2            <NA>
#>   Orig.Infra.Rank_2 matched direct_match Matched.Genus Matched.Species
#> 1              <NA>    TRUE         TRUE      CATTLEYA          MAXIMA
#> 2              <NA>    TRUE         TRUE     POLYLEPIS          INCANA
#> 3              <NA>    TRUE         TRUE      CATTLEYA          MAXIMA
#>   Matched.Infra.Rank Matched.Infraspecies Matched.Infra.Rank_2
#> 1               <NA>                 <NA>                 <NA>
#> 2               <NA>                 <NA>                 <NA>
#> 3               <NA>                 <NA>                 <NA>
#>   Matched.Infraspecies_2 genus_match fuzzy_match_genus fuzzy_genus_dist
#> 1                   <NA>          NA                NA               NA
#> 2                   <NA>          NA                NA               NA
#> 3                   <NA>          NA                NA               NA
#>   direct_match_species_within_genus suffix_match_species_within_genus
#> 1                                NA                                NA
#> 2                                NA                                NA
#> 3                                NA                                NA
#>   fuzzy_match_species_within_genus fuzzy_species_dist Matched.Rank.Calculated
#> 1                               NA                 NA                       2
#> 2                               NA                 NA                       2
#> 3                               NA                 NA                       2
#>   valid_rank direct_match_infra_rank fuzzy_match_infraspecies
#> 1       TRUE                      NA                       NA
#> 2       TRUE                      NA                       NA
#> 3       TRUE                      NA                       NA
#>   fuzzy_infraspecies_dist  tag infraspecies infraspecies_2 threat_category
#> 1                      NA <NA>         <NA>           <NA>              CR
#> 2                      NA <NA>         <NA>           <NA>              CR
#> 3                      NA <NA>         <NA>           <NA>              CRIf you use peruflorads43 in your research, please cite:
citation("peruflorads43")
#> To cite peruflorads43 in publications use:
#> 
#>   Santos-Andrade P.E. (2025). peruflorads43: Check Threatened Plant
#>   Species Status Against Peru's DS 043-2006-AG
#> 
#> A BibTeX entry for LaTeX users is
#> 
#>   @Manual{,
#>     title = {peruflorads43: Check Threatened Plant Species Status Against Peru's DS 043-2006-AG},
#>     author = {Paul E. Santos Andrade},
#>     year = {2025},
#>     url = {https://github.com/PaulESantos/peruflorads43},
#>   }Legal reference:
Ministerio de Agricultura. (2006). Decreto Supremo N° 043-2006-AG: Aprueban Categorización de Especies Amenazadas de Flora Silvestre. El Peruano, July 13, 2006.
Disclaimer: This package implements DS 043-2006-AG for research and conservation purposes. For official legal determinations, consult the original decree and relevant Peruvian authorities.