inst/doc/photosynthesis-introduction.R

## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  warning = FALSE,
  message = FALSE,
  eval = TRUE
)

## ---- message = FALSE---------------------------------------------------------

library(dplyr)
library(magrittr)
library(photosynthesis)

# Leaving the make_* functions empty will automatically default to defaults
# parameters.
bake_par   = make_bakepar()                       # temperature response parameters
constants  = make_constants(use_tealeaves = FALSE) # physical constants
leaf_par   = make_leafpar(use_tealeaves = FALSE)   # leaf parameters
enviro_par = make_enviropar(use_tealeaves = FALSE) # environmental parameters

photo(leaf_par, enviro_par, bake_par, constants, quiet = TRUE,
      use_tealeaves = FALSE)


## ---- replace-defaults--------------------------------------------------------

# Use the `replace` argument to replace defaults. This must be a named list, and
# each named element must have the proper units specified. See `?make_parameters`
# for all parameter names and proper units.

# Temperature response parameters can be updated (but we won't do that here)
bake_par = make_bakepar()

# Physical constants probably do not need to be replaced in most cases,
# that's why we call them 'constants'!
constants  = make_constants(use_tealeaves = FALSE)

# First, we'll change photosynthetic photon flux density to 1000 umol / (m^2 s)
enviro_par = make_enviropar(
  replace = list(
    PPFD = set_units(1000, "umol/m^2/s")
    ), use_tealeaves = FALSE
  )

# Next, we'll change stomatal conductance to 0.3 mol / m^2 / s.
leaf_par = make_leafpar(
  replace = list(
    g_sc = set_units(0.3, mol / m^2 / s)
    ), use_tealeaves = FALSE
  )

photo <- photo(leaf_par, enviro_par, bake_par, constants, quiet = TRUE,
               use_tealeaves = FALSE)

photo |>
  select(PPFD, C_chl, A) |>
  knitr::kable()


## ---- environmental-gradients-------------------------------------------------

# As before, use the `replace` argument to replace defaults, but this time we
# enter multiple values

bake_par = make_bakepar()
constants = make_constants(use_tealeaves = FALSE)

# First, we'll change the PPFD to 1000 and 1500 umol / (m^2 s)
enviro_par = make_enviropar(
  replace = list(
    PPFD = set_units(c(1000, 1500), umol / m^2 / s)
    ), use_tealeaves = FALSE
  )

# Next, we'll change stomatal conductance to to 0.2 and 0.4 mol / m^2 / s
leaf_par  = make_leafpar(
  replace = list(
    g_sc = set_units(c(0.2, 0.4), mol / m^2 / s)
    ), use_tealeaves = FALSE
  )

# Now there should be 4 combinations (high and low g_sc crossed with high and low PPFD)
ph = photosynthesis(leaf_par, enviro_par, bake_par, constants, 
                     use_tealeaves = FALSE, progress = FALSE, quiet = TRUE)

ph |> 
  select(g_sc, PPFD, A) |>
  knitr::kable()


## ---- parallel-example, eval = FALSE------------------------------------------
#  
#  # NOTE: parallel example is not evaluated because it was causing an issue with CRAN, but you can copy-and-paste the code to run on your own machine.
#  
#  library(future)
#  plan("multisession") # Set up plan
#  
#  # We'll use the `replace` argument to enter multiple atmospheric CO2 concentrations
#  
#  bake_par = make_bakepar()
#  constants  = make_constants(use_tealeaves = FALSE)
#  
#  enviro_par = make_enviropar(
#    replace = list(
#      C_air = set_units(seq(10, 2000, length.out = 20), umol / mol)
#      ), use_tealeaves = FALSE
#    )
#  
#  leaf_par  = make_leafpar(use_tealeaves = FALSE)
#  
#  ph = photosynthesis(leaf_par, enviro_par, bake_par, constants,
#                       use_tealeaves = FALSE, progress = FALSE,
#                       quiet = TRUE, parallel = TRUE)
#  
#  # Plot C_c versus A
#  library(ggplot2)
#  
#  ## Drop units for plotting
#  ph %<>% mutate_if(~ is(.x, "units"), drop_units)
#  ggplot(ph, aes(C_chl, A)) +
#    geom_line(size = 2) +
#    xlab(expression(paste(C[chl], " [ppm]"))) +
#    ylab(expression(paste("A [", mu, "mol ", m^-2~s^-1, "]"))) +
#    theme_bw() +
#    NULL
#  

## ---- use-tealeaves-example, eval = FALSE-------------------------------------
#  
#  # NOTE: parallel example is not evaluated because it was causing an issue with CRAN, but you can copy-and-paste the code to run on your own machine.
#  
#  # You will need to set use_tealeaves = TRUE when making parameters because additional parameters are needed for tealeaves.
#  
#  bake_par = make_bakepar()
#  constants  = make_constants(use_tealeaves = TRUE)
#  
#  enviro_par = make_enviropar(
#    replace = list(
#      T_air = set_units(seq(288.15, 313.15, 1), K)
#      ), use_tealeaves = TRUE
#    )
#  
#  leaf_par = make_leafpar(replace = list(
#      g_sc = set_units(c(0.2, 0.4), mol / m^2 / s)
#      ), use_tealeaves = TRUE
#    )
#  
#  ph = photosynthesis(leaf_par, enviro_par, bake_par, constants,
#                       use_tealeaves = TRUE, progress = FALSE,
#                     quiet = TRUE, parallel = TRUE)
#  
#  # Plot temperature and photosynthesis
#  library(ggplot2)
#  
#  ## Drop units for plotting
#  ph %<>%
#    mutate_if(~ is(.x, "units"), drop_units) %>%
#    mutate(`g[s]` = ifelse(g_sc == 0.2, "low", "high"))
#  
#  ggplot(ph, aes(T_air, T_leaf, color = `g[s]`)) +
#    geom_line(size = 2, lineend = "round") +
#    geom_abline(slope = 1, intercept = 0, linetype = "dotted") +
#    scale_color_discrete(name = expression(g[s])) +
#    xlab(expression(paste(T[air], " [K]"))) +
#    ylab(expression(paste(T[leaf], " [K]"))) +
#    theme_bw() +
#    NULL
#  
#  ggplot(ph, aes(T_air, A, color = `g[s]`)) +
#    geom_line(size = 2, lineend = "round") +
#    scale_color_discrete(name = expression(g[s])) +
#    xlab(expression(paste(T[leaf], " [K]"))) +
#    ylab(expression(paste("A [", mu, "mol ", m^-2~s^-1, "]"))) +
#    theme_bw() +
#    NULL
#  

Try the photosynthesis package in your browser

Any scripts or data that you put into this service are public.

photosynthesis documentation built on Aug. 15, 2023, 9:08 a.m.