Skip to contents

This function allows users to project annual average climate change impacts through 2100 (2010-2100) for available sectors, with the option to extend results to 2300 (2010-2300). Users may specify custom temperature, U.S. population, and GDP scenarios. The output is an R data frame object containing annual average impacts, by year, for each sector, variant, impact type, region, state, and model.

As of FrEDI Version 4.1.0, run_fredi() calculates impacts at the state-level for all available sectors.

Usage

run_fredi(
  inputsList = list(tempInput = NULL, slrInput = NULL, gdpInput = NULL, popInput = NULL),
  sectorList = NULL,
  aggLevels = c("national", "modelaverage", "impactyear", "impacttype"),
  elasticity = 1,
  maxYear = 2100,
  thru2300 = FALSE,
  outputList = FALSE,
  allCols = FALSE,
  silent = TRUE
)

Arguments

inputsList=NULL

A list of named elements named elements (names(inputsList) = c("tempInput", "slrInput", "gdpInput", "popInput")), each containing data frames of custom temperature, global mean sea level rise (GMSL), gross domestic product (GDP), and/or state-level population trajectories, respectively, over a continuous period in the range 2010 to 2300. Temperature and sea level rise inputs should start in 2000 or earlier. Values for population and GDP scenarios can start in 2010 or earlier. Values for each scenario type must be within reasonable ranges. For more information, see import_inputs().

sectorList=NULL

A character vector indicating a selection of sectors for which to calculate results (see get_sectorInfo()). If NULL, all sectors are included (i.e., sectorList = get_sectorInfo()).

aggLevels="all"

Levels of aggregation at which to summarize data: one or more of c("national", "modelaverage", "impactyear", "impacttype", "all", "none"). Defaults to all levels (i.e., aggLevels = "all"). Uses the same aggregation levels as aggregate_impacts(). Note that, if "impacttype" is in aggLevels (e.g., aggLevels = "all"), columns "physical_measure" and "physical_impacts" will be dropped from the results data frame. This is because aggregating over impact types for some sectors requires summing costs over different types of physical impacts, so reporting the physical impacts would be nonsensical.

elasticity=1

A numeric value indicating an elasticity to use for adjusting VSL for applicable sectors and impacts (defaults to elasticity = 1). Applicable sectors and impacts are: Climate-Driven Changes in Air Quality (all impact types), ATS Temperature-Related Mortality (impactType = "N/A"; i.e., all impact types), CIL Temperature-Related Mortality, Extreme Temperature (all impact types), Suicide (impactType = "N/A"; i.e., all impact types), Southwest Dust (impactType = "All Mortality"), Valley Fever (impactType = "Mortality"), Vibriosis (impactType = "N/A"; i.e., all impact types), and Wildfire (impactType = "Mortality").

maxYear=2100

A numeric value indicating the maximum year for the analysis. The range for maxYear is [2011, 2300]. Defaults to maxYear = 2100.

thru2300=FALSE

A TRUE/FALSE shortcut that overrides the maxYear argument to run the model to 2300. Defaults to thru2300 = FALSE.

outputList=FALSE

A TRUE/FALSE value indicating whether to output results as a data frame object (outputList = FALSE, default) or to return a list of objects (outputList = TRUE) that includes information about model provenance (including input arguments and input scenarios) along with the data frame of results.

allCols=FALSE

A TRUE/FALSE value indicating whether to include intermediate column values in results (e.g., physical and economic multipliers). Used in testing. Note that aggregation levels must be set to aggLevels = "none" to properly return the intermediate columns. Defaults to allCols = FALSE).

silent=TRUE

A TRUE/FALSE value indicating the level of messaging desired by the user (default=TRUE).

Value

If outputList=FALSE, the output of run_fredi() is a data frame object (described above) containing annual average impacts over the analysis period, for each sector, variant, impact type, impact year, region, state, and model (GCM name for temperature-driven sectors and "Interpolation" for SLR-driven sectors).

If outputList=TRUE, run_fredi() returns a list object containing the following:

  • statusList. A list with values for the arguments passed to run_fredi() (including defaults if unspecified).

  • argsList. A list with elements named after run_fredi() arguments, containing the values of the arguments passed to run_fredi() (or default values if unspecified).

  • scenarios. A list with named elements "temp", "slr", "gdp", and "pop" -- each containing the scenarios for temperature, SLR, GDP, and population as used by the model in calculating impacts.

  • results. Containing a data frame of annual impacts (i.e., the same data frame returned if outputList = FALSE).

Details

This function allows users to project annual average climate change impacts through 2300 (2010-2300) for available sectors. run_fredi() is the main function in the FrEDI R package, described elsewhere (See https://epa.gov/cira/FrEDI for more information).

Users can specify an optional list of custom scenarios with inputsList (for more information on the format of inputs, see import_inputs()). The function import_inputs() can be used to importing custom scenarios from CSV files. import_inputs() returns a list with elements tempInput, slrInput, gdpInput, and popInput, with each containing a data frame with a custom scenario for temperature, GMSL, GDP, and state-level population, respectively. If a user imports scenarios using import_inputs(), they can pass the outputs of import_inputs() directly to the run_fredi() argument inputsList. Note that the documentation for import_inputs() can also provide additional guidance and specification on the formats for each scenario type.

If inputsList = NULL, run_fredi() uses defaults for temperature, SLR, GDP, and population. Otherwise, run_fredi() looks for a list object passed to the argument inputsList. Within that list, run_fredi() looks for list elements tempInput, slrInput, gdpInput, and popInput containing data frames with custom scenarios for temperature, GMSL, GDP, and state population, respectively. run_fredi() will default back to the default scenarios for any list elements that empty or NULL (in other words, running run_fredi(inputsList = list()) returns the same outputs as running run_fredi()).

  • Temperature Inputs. The input temperature scenario requires CONUS temperatures in degrees Celsius relative to 1995 (degrees of warming relative to the baseline year--i.e., the central year of the 1986-2005 baseline). CONUS temperature values must be greater than or equal to zero degrees Celsius.

    • Users can convert global temperatures to CONUS temperatures using convertTemps(from = "global") (or by specifying import_inputs(temptype = "global") when using import_inputs() to import a temperature scenario from a CSV file).

    • tempInput requires a data frame object with two columns with names "year", and "temp_C" containing the year and CONUS temperatures in degrees Celsius, respectively.

    • Temperature inputs must have at least one non-missing value in 2000 or earlier and at least one non-missing value in or after the final analysis year (as specified by maxYear).

    • If the user does not specify an input scenario for temperature (i.e., inputsList = list(tempInput = NULL), run_fredi() uses a default temperature scenario.

  • SLR Inputs. The input SLR scenario requires values for changes in global mean sea level rise (GMSL) heights in centimeters (cm). GMSL heights must be greater than or equal to zero.

    • slrInput requires a data frame object with two columns with names "year", "slr_cm" containing the year and global mean sea level rise (GMSL) in centimeters, respectively.

    • SLR inputs must have at least one non-missing value in 2000 or earlier and at least one non-missing value in or after the final analysis year (as specified by maxYear).

    • If the user does not specify an input scenario for SLR (i.e., inputsList = list(slrInput = NULL), run_fredi() first converts the input or default CONUS temperature scenario to global temperatures (using convertTemps()) and then converts the global temperatures to a global mean sea level rise (GMSL) height in centimeters (using temps2slr()).

  • GDP Inputs. The input scenario for gross domestic product (GDP) requires national GDP values in 2015$. GDP values must be greater than or equal to zero.

    • gdpInput requires a data frame object with two columns with names "year", and "gdp_usd" containing the year and the national GDP, respectively. GDP values must be greater than or equal to zero.

    • GDP inputs must have at least one non-missing value in 2010 or earlier and at least one non-missing value in or after the final analysis year (as specified by maxYear).

    • If the user does not specify an input scenario for GDP (i.e., inputsList = list(gdpInput = NULL), run_fredi() uses a default GDP scenario.

  • Population Inputs. The input population scenario requires state-level population values. Population values must be greater than or equal to zero.

    • popInput requires a data frame object with five columns with names "region", "state", "postal", "year", and "state" containing the year, the NCA region name, the state name, the postal code abbreviation for the state, and the state population, respectively.

    • Population inputs must have at least one non-missing value in 2010 or earlier and at least one non-missing value in or after the final analysis year (as specified by maxYear).

    • If the user does not specify an input scenario for population (i.e., inputsList = list(popInput = NULL), run_fredi() uses a default population scenario.

run_fredi() linearly interpolates missing annual values for all input scenarios using non-missing values (each scenario requires at least two non-missing values as detailed above for each scenario type). After interpolation of the input scenarios, run_fredi() subsets the input scenarios to values within the analysis period.

  • Temperatures are interpolated using 1995 as the baseline year (i.e., the central year of the 1986-2005 baseline) and GMSL is interpolated using 2000 as the baseline year. In other words, temperature (in degrees Celsius) is set to zero for the year 1995, whereas GMSL is set to zero for the year 2000. The interpolated temperature and GMSL scenarios are combined into a column called driverValue, along with additional columns for year, the driver unit (column "driverUnit", with driverUnit = "degrees Celsius" and driverUnit = "cm" for temperature- and SLR-driven sectors, respectively), and the associated model type (column "model_type", with model_type = "GCM" and model_type = "SLR" for temperature- and SLR-driven sectors, respectively

  • run_fredi() calculations national population from state-level values and then calculates GDP per capita from values for GDP and national population. Values for state population, national population, national GDP (in 2015$), and national per capita GDP (in 2015$/capita) are provided in the results data frame in columns "state_pop", "national_pop", "gdp_usd", and "gdp_percap", respectively.

By default, run_fredi() will calculate impacts for all sectors included in the tool. Alternatively, users can pass a character vector specifying a single sector or a subset of sectors using the sectorList argument. To see a list of sectors included within FrEDI, run get_sectorInfo(). If sectorList = NULL (default), all sectors are included.

By default, run_fredi() calculates impacts starting in the year 2010 and ending in 2100. Specify an alternative end year for the analysis using the maxYear argument. maxYear has a default value of 2100 and minimum and maximum values of 2011 and 2300, respectively. Alternatively, users can set argument thru2300 = TRUE to override the maxYear argument and set maxYear = 2300. Note that the default scenarios included within FrEDI stop in the year 2100; users must provide custom input scenarios out to the desired end year and specify a maxYear >= 2100 (and maxYear <= 2300) in order to return non-missing values for years after 2100.

Annual impacts for each sector, variant, impact type, and impact year combination included in the model are calculated by multiplying scaled climate impacts by a physical scalar and economic scalars and multipliers. Some sectors use Value of a Statistical Life (VSL) to adjust the value non-linearly over time. run_fredi() uses a default value of elasticity = 1to adjust VSL for applicable sectors and impacts (the default value of elasticity = 1 keeps VSL constant over time). A custom elasticity can be passed to the elasticity argument. Applicable sectors and impacts are *Climate-Driven Changes in Air Quality (all impact types), ATS Temperature-Related Mortality (impactType = "N/A"; i.e., all impact types), CIL Temperature-Related Mortality, Extreme Temperature (all impact types), Suicide (impactType = "N/A"; i.e., all impact types), Southwest Dust (impactType = "All Mortality"), Valley Fever (impactType = "Mortality"), Vibriosis (impactType = "N/A"; i.e., all impact types), and Wildfire (impactType = "Mortality").

run_fredi() aggregates or summarizes results to level(s) of aggregation specified by the user (passed to aggLevels) using the post-processing helper function aggregate_impacts(). Users can specify all aggregation levels at once by specifying aggLevels = "all" (default) or no aggregation levels (aggLevels = "none"). Users can specify a single aggregation level or multiple aggregation levels by passing a single character string or character vector to aggLevels. Options for aggregation include calculating national totals (aggLevels = "national"), averaging across model types and models (aggLevels = "modelaverage"), summing over all impact types (aggLevels = "impacttype"), and interpolating between impact year estimates (aggLevels = "impactYear").

If the user specifies aggLevels = "none", run_fredi() returns a data frame with columns: "sector", "variant", "impactType", "impactYear", "region", "state", "postal", "model_type", "model", "sectorprimary", "includeaggregate", "physicalmeasure", "driverType", "driverUnit", "driverValue", "gdp_usd", "national_pop", "gdp_percap", "state_pop", "year", "physical_impacts", and "annual_impacts".

  • Columns "sector", "variant", "impactType", "impactYear", "region", "state", "postal", "model_type", and "model" all contain observation identifiers (sector name, variant, impact type, impact year, region, state, state postal code abbreviation, model type, and model, respectively).

  • Columns "sectorprimary" and "includeaggregate" contain values that provide information about how to treat sectors and when aggregating over sectors (e.g., summing impacts across sectors). Note that FrEDI does not currently provide functionality to aggregate over sectors; this information is provided for user convenience.

    • Column "sectorprimary" contains values indicating which variant to use as the primary one for each sector: sectorprimary = 1for primary variants and sectorprimary = 0 for non-primary variants. When aggregating impacts over sectors, users should filter the outputs of run_fredi() to variants with sectorprimary == 1.

    • Column "includeaggregate" contains values that provide information about how to treat sectors when aggregating over sectors (e.g., summing impacts across sectors). Sectors that have a value of includeaggregate == 0 should be dropped when aggregating results over sectors, to avoid potential double-counting of impacts for similar sectors. For instance, sectors ATS Temperature-Related Mortality, CIL Temperature-Related Mortality, and Extreme Temperature have values for temperature-related mortality. To avoid double counting, outputs of run_fredi() should be filtered to values for which includeaggregate > 0. Sectors with a value of includeaggregate > 0 can be included when aggregating over sectors; most sectors with a value of includeaggregate > 0 will have a value of includeaggregate = 1. Values of includeaggregate > 1 flag additional information about sectors; currently, only the Suicide sector has a value of includeaggregate > 1, with a value of includeaggregate = 2. This flag indicates that the impacts from Suicide can be included when summing values across sectors, but may have some overlap with impacts from ATS Temperature-Related Mortality. For more information about the potential overlap between impacts for ATS Temperature-Related Mortality and Suicide, visit the technical documentation at https://epa.gov/cira/FrEDI/,

  • Columns "driverType", "driverUnit", and "driverValue" contain information about the temperature and SLR scenarios.

  • Columns "gdp_usd", "national_pop", "gdp_percap", and "state_pop" contain information about the GDP and population scenarios.

  • Columns "physicalmeasure" and "physical_impacts" contain information about physical impacts.

  • Column "annual_impacts" contains information on the economic value associated with annual impacts.

If the user specifies aggLevels = "all" or other combinations of aggregation levels, run_fredi() passes the results data frame and the aggLevels argument to the aggregate_impacts() function. aggregate_impacts() then performs the following calculations, using the default grouping columns for the aggregate_impacts(): "sector", "variant", "impactType", "impactYear", "region", "state", "postal", "model_type", "model", "sectorprimary", "includeaggregate", "physicalmeasure", and "year" (note that the "variant" column referred to below contains information about the variant name (or “N/A”), as applicable).

Aggregation LevelDescription
impactyearTo aggregate over impact years, aggregate_impacts() first separates results for sectors with only one impact year estimate (i.e., impactYear = "N/A") from from observations with multiple impact year estimates (i.e., sectors with results for both impactYear = "2010" and impactYear = "2090"). For these sectors with multiple impact years, physical impacts and annual costs (columns "physical_impacts" and "annual_impacts") are linearly interpolated between impact year estimates. For any model run years above 2090, annual results for sectors with multiple impact years return the 2090 estimate. The interpolated values are then row-bound to the results for sectors with a single impact year estimate, and column impactYear set to impactYear = "Interpolation" for all values. If "impactyear" is included in aggLevels (e.g., aggLevels = "all"), aggregate_impacts() aggregates over impact years before performing other types of aggregation.
modelaverageTo aggregate over models for temperature-driven sectors, aggregate_impacts() averages physical impacts and annual costs (columns "physical_impacts" and "annual_impacts", respectively) across all GCM models present in the data. aggregate_impacts() drops the column "model" from the grouping columns when averaging over models. Averages exclude observations with missing values. However, If all values within a grouping are missing, the model average is set to NA. The values in column "model" are set to "Average" for model averages and the model averages data frame is then row-bound to the main results data frame. For SLR-driven sectors, there is no need for additional model aggregation; these values already have model = "Interpolation". If "modelaverage" is included in aggLevels (e.g., aggLevels = "all"), aggregate_impacts() first aggregates over impact years (if "impactyear" present in aggLevels or if aggLevels = "all") before aggregating over models.
nationalTo aggregate values to the national level, aggregate_impacts() sums physical impacts and annual costs (columns "physical_impacts" and "annual_impacts", respectively) across all states present in the data. aggregate_impacts() drops the columns "region", "state", and "postal" when summing over states and regions. Years which have missing column data for all regions return as NA. Values for columns "region", "state", and "postal" are set to "National Total", All, and US, respectively. The data frame with national totals is then row-bound to the main results data frame. If "national" is included in aggLevels (e.g., aggLevels = "all"), aggregate_impacts() first aggregates over impact years and/or models (if "impactyear" and/or "modelaverage" are present in aggLevels or if aggLevels = "all") before aggregating over models.
impacttypeTo aggregate values over impact types, aggregate_impacts() sums annual impacts (column "annual_impacts") across all impact types for each sector. aggregate_impacts() drops the column "impactType" and "physicalmeasure" from the grouping columns when summing over impact types. Years which have missing column data for all impact types return as NA. All values in column "impactType" are set to "all". Aggregating over impact types, drops columns related to physical impacts (i.e., columns "physicalmeasure" and "physical_impacts"). These columns are dropped since aggregating over impact types for some sectors requires summing costs over different types of physical impacts, so reporting the physical impacts would be nonsensical.

After aggregating values, aggregate_impacts() joins the data frame of impacts with information about "driverType", "driverUnit", "driverValue", "gdp_usd", "national_pop", "gdp_percap", and "state_pop".

If outputList = FALSE (default), run_fredi() returns a data frame of annual average impacts over the analysis period, for each sector, variant, impact type, impact year, region, state, model type ("GCM" or "SLR"), and model. If outputList = TRUE, in addition to the data frame of impacts, run_fredi() returns a list object containing information about values for function arguments, driver scenarios, and population and GDP scenarios.

References

Environmental Protection Agency (EPA). 2021. Technical Documentation on The Framework for Evaluating Damages and Impacts (FrEDI). Technical Report EPA 430-R-21-004, EPA, Washington, DC. Available at https://epa.gov/cira/FrEDI/.

Examples

### Load FrEDI
require(FrEDI)

### Run function with defaults (same as `defaultResults` dataset)
run1 <- run_fredi()
#> Checking input values...
#> 	No temperature scenario provided...using default temperature scenario...
#> 	Creating SLR scenario from temperature scenario...
#> 	No GDP scenario provided...Using default GDP scenario...
#> 	Creating population scenario from defaults...
#> Updating scalars...
#> Calculating impacts...
#> Formatting results...
#> 
#> Finished.

### Load climate scenarios and glimpse data
data("gcamScenarios")
gcamScenarios |> glimpse()
#> Rows: 606
#> Columns: 4
#> $ year     <int> 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2…
#> $ temp_C   <dbl> 0.1269649, 0.1575513, 0.1858310, 0.2101611, 0.2306551, 0.2444…
#> $ slr_cm   <dbl> 0.0000000, 0.2727356, 0.5552278, 0.8458496, 1.1430287, 1.4440…
#> $ scenario <chr> "Hector_GCAM_v5.3_ECS_3.0_REF", "Hector_GCAM_v5.3_ECS_3.0_REF…

### Load population scenario and glimpse data
data(popScenario)
popScenario |> glimpse()
#> Rows: 14,259
#> Columns: 5
#> $ year      <dbl> 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, …
#> $ region    <chr> "Southeast", "Southeast", "Southeast", "Southeast", "Southea…
#> $ state     <chr> "Alabama", "Alabama", "Alabama", "Alabama", "Alabama", "Alab…
#> $ postal    <chr> "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", …
#> $ state_pop <dbl> 4779736, 4823623, 4867509, 4911396, 4955282, 4999169, 503604…

### Subset climate scenario
temps1 <- gcamScenarios |> filter(scenario=="Hector_GCAM_v5.3_ECS_3.0_ref")
temps1 <- temps1 |> mutate(temp_C = temp_C_global |> convertTemps(from="global"))
#> Error in mutate(temps1, temp_C = convertTemps(temp_C_global, from = "global")):  In argument: `temp_C = convertTemps(temp_C_global, from = "global")`.
#> Caused by error:
#> ! object 'temp_C_global' not found
temps1 <- temps1 |> select(year, temp_C)

### Run custom scenario
run2 <- run_fredi(inputsList=list(tempInput=temps1, popInput=popScenario))
#> Checking input values...
#> 	Creating temperature scenario from user inputs...
#> Error in map(regions0, function(region_i) {    df_i <- filter(data, region == region_i)    x_i <- df_i[["year"]]    y_i <- df_i[[column0]]    new_i <- approx(x = x_i, y = y_i, xout = years, rule = rule,         method = method)    new_i <- as_tibble(new_i)    new_i <- rename_at(new_i, c(cols0), ~cols1)    new_i <- mutate(new_i, region = region_i)    return(new_i)}):  In index: 1.
#> Caused by error in `approx()`:
#> ! need at least two non-NA values to interpolate

### Load scenarios from file:
scenariosPath <- system.file(package="FrEDI") |> file.path("extdata","scenarios")
scenariosPath |> list.files()
#> [1] "GCAM_scenario.csv"          "State ICLUS Population.csv"
#> [3] "slr_from_GCAM.csv"         


### SLR Scenario File Name
slrInputFile  <- scenariosPath |> file.path("slr_from_GCAM.csv")

### Population Scenario File Name
popInputFile  <- scenariosPath |> file.path("State ICLUS Population.csv")

### Import inputs
x_inputs <- import_inputs(slrfile=slrInputFile, popfile=popInputFile, popArea="state")
#> 
#> In import_inputs():
#> 	Loading data...
#> 	User specified slrfile...
#> 		Importing data from C:/Program Files/R/R-4.4.0/library/FrEDI/extdata/scenarios/slr_from_GCAM.csv...
#> 		Data loaded.
#> 	User specified popfile...
#> 		Importing data from C:/Program Files/R/R-4.4.0/library/FrEDI/extdata/scenarios/State ICLUS Population.csv...
#> 		Data loaded.
#> 
#> 	Checking input values...
#> 
#> 		Checking input values for slr inputs...
#> 		Values passed.
#> 
#> 		Checking input values for pop inputs...
#> 			Column "pop" not found in popfile data!
#> 			Looking for columns with matches to the string "pop"...1 match found!
#> 			Using column "state_pop", and renaming to "state_pop"...
#> 		Values passed.
#> 
#> Finished.

### Run custom scenarios
run3 <- run_fredi(inputsList=x_inputs)
#> Checking input values...
#> 	No temperature scenario provided...using default temperature scenario...
#> 	Creating SLR scenario from user inputs...
#> 	No GDP scenario provided...Using default GDP scenario...
#> 	Creating population scenario from user inputs...
#> Updating scalars...
#> Calculating impacts...
#> Formatting results...
#> 
#> Finished.

### Get information on sectors:
get_sectorInfo()
#>  [1] "ATS Temperature-Related Mortality"             
#>  [2] "Asphalt Roads"                                 
#>  [3] "CIL Agriculture"                               
#>  [4] "CIL Crime"                                     
#>  [5] "CIL Temperature-Related Mortality"             
#>  [6] "Climate-Driven Changes in Air Quality"         
#>  [7] "Coastal Properties"                            
#>  [8] "Electricity Demand and Supply"                 
#>  [9] "Electricity Transmission and Distribution"     
#> [10] "Extreme Temperature"                           
#> [11] "Inland Flooding"                               
#> [12] "Labor"                                         
#> [13] "Marine Fisheries"                              
#> [14] "Rail"                                          
#> [15] "Roads"                                         
#> [16] "Southwest Dust"                                
#> [17] "Suicide"                                       
#> [18] "Transportation Impacts from High Tide Flooding"
#> [19] "Urban Drainage"                                
#> [20] "Valley Fever"                                  
#> [21] "Vibriosis"                                     
#> [22] "Water Quality"                                 
#> [23] "Wildfire"                                      
#> [24] "Wind Damage"                                   
#> [25] "Winter Recreation"                             

### Run for a single sector, with default inputs, no aggregation, and elasticity=1:
run4 <- run_fredi(sectorList="ATS Temperature-Related Mortality", aggLevels="none", elasticity=1)
#> Checking input values...
#> 	No temperature scenario provided...using default temperature scenario...
#> 	Creating SLR scenario from temperature scenario...
#> 	No GDP scenario provided...Using default GDP scenario...
#> 	Creating population scenario from defaults...
#> Updating scalars...
#> Calculating impacts...
#> Formatting results...
#> 
#> Finished.

### Set end year for analysis to 2110 -- messages user and returns a null value since default scenarios only have values out to 2100
run5 <- run_fredi(maxYear=2110)
#> Checking input values...
#> 	No temperature scenario provided...using default temperature scenario...
#> 	Temperature scenario must have at least one non-missing value in or after the year 2110...
#> 
#> Exiting...

### Set end year for analysis to 2300 -- messages user and returns a null value since default scenarios only have values out to 2100)
run6 <- run_fredi(thru2300=TRUE)
#> Checking input values...
#> 	No temperature scenario provided...using default temperature scenario...
#> 	Temperature scenario must have at least one non-missing value in or after the year 2300...
#> 
#> Exiting...