diff --git a/NAMESPACE b/NAMESPACE index be50eb1..7451272 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -168,6 +168,7 @@ importFrom(stats,quantile) importFrom(stats,resid) importFrom(stats,rnorm) importFrom(stats,sd) +importFrom(stats,setNames) importFrom(tibble,as_tibble) importFrom(tibble,tibble) importFrom(utils,capture.output) diff --git a/R/EddyPartitioning.R b/R/EddyPartitioning.R index 7dfd8d7..fe8764a 100644 --- a/R/EddyPartitioning.R +++ b/R/EddyPartitioning.R @@ -3,12 +3,16 @@ sEddyProc_sGLFluxPartitionUStarScens <- function( ### Flux partitioning after Lasslop et al. (2010) ... ##<< arguments to \code{\link{sEddyProc_sGLFluxPartition}} + , uStarScenKeep = character(0) ##<< Scalar string specifying the scenario + ## for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. + ## Defaults to the first scenario. ) { ##details<< ## Daytime-based partitioning of measured net ecosystem fluxes into ## gross primary production (GPP) and ecosystem respiration (Reco) ## for all u* threshold scenarios. - tmp <- sApplyUStarScen( .self$sGLFluxPartition, ... ) + tmp <- sApplyUStarScen( + .self$sGLFluxPartition, ..., uStarScenKeep = uStarScenKeep) NULL } sEddyProc$methods( @@ -67,12 +71,16 @@ sEddyProc$methods(sGLFluxPartition = sEddyProc_sGLFluxPartition) sEddyProc_sTKFluxPartitionUStarScens <- function( ### Flux partitioning after Lasslop 2015 ... ##<< arguments to \code{\link{sEddyProc_sTKFluxPartition}} + , uStarScenKeep = character(0) ##<< Scalar string specifying the scenario + ## for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. + ## Defaults to the first scenario. ) { ##details<< ## Daytime-based partitioning of measured net ecosystem fluxes into ## gross primary production (GPP) and ecosystem respiration (Reco) ## for all u* threshold scenarios. - tmp <- sApplyUStarScen( .self$sTKFluxPartition, ... ) + tmp <- sApplyUStarScen( + .self$sTKFluxPartition, ..., uStarScenKeep = uStarScenKeep ) NULL } sEddyProc$methods( @@ -98,12 +106,16 @@ sEddyProc$methods(sTKFluxPartition = sEddyProc_sTKFluxPartition) sEddyProc_sMRFluxPartitionUStarScens <- function( ### Flux partitioning after Reichstein et al. (2005) ... ##<< arguments to \code{\link{sEddyProc_sMRFluxPartition}} + , uStarScenKeep = character(0) ##<< Scalar string specifying the scenario + ## for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. + ## Defaults to the first scenario. ) { ##details<< ## Nighttime-based partitioning of measured net ecosystem fluxes into ## gross primary production (GPP) and ecosystem respiration (Reco) ## for all u* threshold scenarios. - tmp <- sApplyUStarScen( .self$sMRFluxPartition, ... ) + tmp <- sApplyUStarScen( + .self$sMRFluxPartition, ..., uStarScenKeep = uStarScenKeep) ##value<< NULL, it adds output columns in the class invisible(tmp) } diff --git a/R/EddyUStarFilterDP.R b/R/EddyUStarFilterDP.R index d0649ba..82a9ff8 100644 --- a/R/EddyUStarFilterDP.R +++ b/R/EddyUStarFilterDP.R @@ -1404,11 +1404,25 @@ sEddyProc_sApplyUStarScen <- function( ### apply a function with changing the suffix argument FUN ##<< function to be applied , ... ##<< further arguments to FUN + , uStarScenKeep = character(0) ##<< Scalar string specifying the scenario + ## for which to keep parameters. If not specified defaults to the first + ## entry in \code{uStarSuffixes}. ) { + ##details<< + ## When repeating computations, some of the + ## output variables maybe replaced. Argument \code{uStarKeep} + ## allows to select the scenario which is computed last, + ## and hence to which ouptut columns refer to. uStarSuffixes = colnames(.self$sGetUstarScenarios())[-1] - resScen <- setNames(lapply(uStarSuffixes, function(suffix){ + if (length(uStarScenKeep) != 1) uStarScenKeep = uStarSuffixes[1] + iKeep = match(uStarScenKeep, uStarSuffixes) + if (is.na(iKeep)) stop( + "Provided uStarScenKeep=",uStarScenKeep," was not among Scenarios: " + ,paste(uStarSuffixes,collapse = ",")) + uStarSuffixesOrdered = c(uStarSuffixes[iKeep], uStarSuffixes[-iKeep]) + resScen <- setNames(rev(lapply(rev(uStarSuffixesOrdered), function(suffix){ FUN(..., suffix = suffix) - }), uStarSuffixes) + })), uStarSuffixesOrdered) } sEddyProc$methods(sApplyUStarScen = sEddyProc_sApplyUStarScen) diff --git a/R/Example.R b/R/Example.R index f222c8c..542e4f9 100644 --- a/R/Example.R +++ b/R/Example.R @@ -31,8 +31,14 @@ getExamplePath <- function( if (file.access(exampleDir, mode = 2) != 0) stop( "target example directory ", exampleDir, " is not writeable.") url <- file.path(remoteDir, filename) - retCode <- suppressWarnings(try(download.file(url, fullname, quiet = TRUE) - , silent = TRUE)) + retCode <- suppressWarnings(try( + download.file(url, fullname, quiet = TRUE) + , silent = TRUE)) + # on Windows may fail because of root certificates, retry with curl + if (inherits(retCode, "try-error")) + retCode <- suppressWarnings(try( + download.file(url, fullname, quiet = TRUE, method = "curl") + , silent = TRUE)) if (!inherits(retCode, "try-error") && retCode == 0) return(fullname) } ##value<< the full path name to the example data or if not available diff --git a/R/imports.R b/R/imports.R index 98d1b96..3fe4a90 100644 --- a/R/imports.R +++ b/R/imports.R @@ -14,7 +14,7 @@ NULL #' @importFrom graphics abline axis box close.screen curve image legend lines #' mtext par plot points polygon screen split.screen #' @importFrom stats aggregate anova approx coef cor cov lm median na.omit -#' nls nls.control optim predict quantile resid rnorm sd +#' nls nls.control optim predict quantile resid rnorm sd setNames #' @importFrom utils capture.output download.file read.csv recover write.table #' @importFrom stats plogis qlogis NULL diff --git a/man/sEddyProc_sApplyUStarScen.Rd b/man/sEddyProc_sApplyUStarScen.Rd index 3df98ba..e09b144 100644 --- a/man/sEddyProc_sApplyUStarScen.Rd +++ b/man/sEddyProc_sApplyUStarScen.Rd @@ -2,12 +2,18 @@ \alias{sEddyProc_sApplyUStarScen} \title{sEddyProc sApplyUStarScen} \description{apply a function with changing the suffix argument} -\usage{sEddyProc_sApplyUStarScen(FUN, ...)} +\usage{sEddyProc_sApplyUStarScen(FUN, ..., uStarScenKeep = character(0))} \arguments{ \item{FUN}{function to be applied} \item{\dots}{further arguments to FUN} + \item{uStarScenKeep}{Scalar string specifying the scenario +for which to keep parameters. If not specified defaults to the first +entry in \code{uStarSuffixes}.} } - +\details{When repeating computations, some of the +output variables maybe replaced. Argument \code{uStarKeep} +allows to select the scenario which is computed last, +and hence to which ouptut columns refer to.} \author{Department for Biogeochemical Integration at MPI-BGC, Jena, Germany [cph], Thomas Wutzler [aut, cre], Markus Reichstein [aut], Antje Maria Moffat [aut, trl], Olaf Menzer [ctb], Mirco Migliavacca [aut], Kerstin Sickel [ctb, trl], Ladislav Šigut [ctb]} diff --git a/man/sEddyProc_sGLFluxPartitionUStarScens.Rd b/man/sEddyProc_sGLFluxPartitionUStarScens.Rd index 8e84443..9b44d18 100644 --- a/man/sEddyProc_sGLFluxPartitionUStarScens.Rd +++ b/man/sEddyProc_sGLFluxPartitionUStarScens.Rd @@ -2,9 +2,13 @@ \alias{sEddyProc_sGLFluxPartitionUStarScens} \title{sEddyProc sGLFluxPartitionUStarScens} \description{Flux partitioning after Lasslop et al. (2010)} -\usage{sEddyProc_sGLFluxPartitionUStarScens(...)} +\usage{sEddyProc_sGLFluxPartitionUStarScens(..., + uStarScenKeep = character(0))} \arguments{ \item{\dots}{arguments to \code{\link{sEddyProc_sGLFluxPartition}}} + \item{uStarScenKeep}{Scalar string specifying the scenario +for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. +Defaults to the first scenario.} } \details{Daytime-based partitioning of measured net ecosystem fluxes into gross primary production (GPP) and ecosystem respiration (Reco) diff --git a/man/sEddyProc_sMRFluxPartitionUStarScens.Rd b/man/sEddyProc_sMRFluxPartitionUStarScens.Rd index aea711c..2edb907 100644 --- a/man/sEddyProc_sMRFluxPartitionUStarScens.Rd +++ b/man/sEddyProc_sMRFluxPartitionUStarScens.Rd @@ -2,9 +2,13 @@ \alias{sEddyProc_sMRFluxPartitionUStarScens} \title{sEddyProc sMRFluxPartitionUStarScens} \description{Flux partitioning after Reichstein et al. (2005)} -\usage{sEddyProc_sMRFluxPartitionUStarScens(...)} +\usage{sEddyProc_sMRFluxPartitionUStarScens(..., + uStarScenKeep = character(0))} \arguments{ \item{\dots}{arguments to \code{\link{sEddyProc_sMRFluxPartition}}} + \item{uStarScenKeep}{Scalar string specifying the scenario +for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. +Defaults to the first scenario.} } \details{Nighttime-based partitioning of measured net ecosystem fluxes into gross primary production (GPP) and ecosystem respiration (Reco) diff --git a/man/sEddyProc_sTKFluxPartitionUStarScens.Rd b/man/sEddyProc_sTKFluxPartitionUStarScens.Rd index e97e51c..a672c7e 100644 --- a/man/sEddyProc_sTKFluxPartitionUStarScens.Rd +++ b/man/sEddyProc_sTKFluxPartitionUStarScens.Rd @@ -2,9 +2,13 @@ \alias{sEddyProc_sTKFluxPartitionUStarScens} \title{sEddyProc sTKFluxPartitionUStarScens} \description{Flux partitioning after Lasslop 2015} -\usage{sEddyProc_sTKFluxPartitionUStarScens(...)} +\usage{sEddyProc_sTKFluxPartitionUStarScens(..., + uStarScenKeep = character(0))} \arguments{ \item{\dots}{arguments to \code{\link{sEddyProc_sTKFluxPartition}}} + \item{uStarScenKeep}{Scalar string specifying the scenario +for which to keep parameters (see \code{\link{sEddyProc_sApplyUStarScen}}. +Defaults to the first scenario.} } \details{Daytime-based partitioning of measured net ecosystem fluxes into gross primary production (GPP) and ecosystem respiration (Reco) diff --git a/man/sEddyProc_useSeaonsalUStarThresholds.Rd b/man/sEddyProc_useSeaonsalUStarThresholds.Rd index e30077d..cfca8ad 100644 --- a/man/sEddyProc_useSeaonsalUStarThresholds.Rd +++ b/man/sEddyProc_useSeaonsalUStarThresholds.Rd @@ -11,5 +11,5 @@ \seealso{\code{\link{sEddyProc_sSetUstarScenarios}}, -\code{\link{sEddyProc_useSeaonsalUStarThresholds}}} +\code{\link{sEddyProc_useAnnualUStarThresholds}}} diff --git a/tests/testthat/test_uStarProc.R b/tests/testthat/test_uStarProc.R index 09760fb..bd5fcca 100644 --- a/tests/testthat/test_uStarProc.R +++ b/tests/testthat/test_uStarProc.R @@ -23,31 +23,31 @@ rm( EddyData99.F ) test_that("UStarProcessing",{ skip_on_cran() - EddyProc.C <- sEddyProc$new( + EProc <- sEddyProc$new( 'DE-Tha', EddyDataWithPosix.F, c('NEE','Rg', 'Tair', 'VPD', 'Ustar')) - EddyProc.C$sEstimateUstarScenarios( + EProc$sEstimateUstarScenarios( nSample = 30L, probs = c(0.1, 0.5, 0.9)) - uStarScen <- EddyProc.C$sGetUstarScenarios() + uStarScen <- EProc$sGetUstarScenarios() expect_equal( colnames(uStarScen), c("season", "uStar", "U10", "U50", "U90")) # omit the uStar scenario - EddyProc.C$sSetUstarScenarios(uStarScen[-2]) - uStarScen <- EddyProc.C$sGetUstarScenarios() + EProc$sSetUstarScenarios(uStarScen[-2]) + uStarScen <- EProc$sGetUstarScenarios() expect_equal( colnames(uStarScen), c("season", "U10", "U50", "U90")) # go on with processing without the need to specify scenarios again - EddyProc.C$sMDSGapFillUStarScens("NEE") - dsFilled <- EddyProc.C$sExportResults() + EProc$sMDSGapFillUStarScens("NEE") + dsFilled <- EProc$sExportResults() expect_true(all( c("NEE_U10_f","NEE_U50_f","NEE_U90_f") %in% colnames(dsFilled))) expect_true(all( c("NEE_U10_fqc","NEE_U50_fqc","NEE_U90_fqc") %in% colnames(dsFilled))) expect_true(!any(c("NEE_f","NEE_uStar_f") %in% colnames(dsFilled))) # MR flux partitioning - EddyProc.C$sSetLocationInfo(LatDeg = 51.0, LongDeg = 13.6, TimeZoneHour = 1) - EddyProc.C$sMDSGapFill('Tair', FillAll.b = FALSE) - EddyProc.C$sMDSGapFill('VPD', FillAll.b = FALSE) - #EddyProc.C$sApplyUStarScen( EddyProc.C$sMRFluxPartition ) - EddyProc.C$sMRFluxPartitionUStarScens() - dsFilled <- EddyProc.C$sExportResults() + EProc$sSetLocationInfo(LatDeg = 51.0, LongDeg = 13.6, TimeZoneHour = 1) + EProc$sMDSGapFill('Tair', FillAll.b = FALSE) + EProc$sMDSGapFill('VPD', FillAll.b = FALSE) + #EProc$sApplyUStarScen( EProc$sMRFluxPartition ) + EProc$sMRFluxPartitionUStarScens() + dsFilled <- EProc$sExportResults() expect_true(all( c("GPP_U10_f","GPP_U50_f","GPP_U90_f") %in% colnames(dsFilled))) expect_true(all( @@ -55,3 +55,28 @@ test_that("UStarProcessing",{ expect_true(!any(c("GPP_f","GPP_uStar_f") %in% colnames(dsFilled))) }) +test_that("sApplyUStarScen",{ + skip_on_cran() + EProc <- sEddyProc$new( + 'DE-Tha', EddyDataWithPosix.F, c('NEE','Rg', 'Tair', 'VPD', 'Ustar')) + EProc$sEstimateUstarScenarios( + nSample = 30L, probs = c(0.1, 0.5, 0.9)) + uStarScen <- EProc$sGetUstarScenarios() + scenKept <- scenFirst <- colnames(uStarScen)[2] + # + # by default suffix of first scenario is kept + res = unlist(EProc$sApplyUStarScen(function(suffix){EProc$sTEMP$suffix <- suffix})) + expect_equal(scenKept, unname(res[1])) + expect_equal(scenKept, EProc$sTEMP$suffix[1]) + # + # specify different one + scenKept <- colnames(uStarScen)[3] + res = unlist(EProc$sApplyUStarScen( + function(suffix){EProc$sTEMP$suffix <- suffix} + , uStarScenKeep = scenKept + )) + expect_equal(scenKept, unname(res[1])) + expect_equal(scenKept, EProc$sTEMP$suffix[1]) +}) + + diff --git a/vignettes/uStarCases.Rmd b/vignettes/uStarCases.Rmd index 5d644ed..6e91642 100644 --- a/vignettes/uStarCases.Rmd +++ b/vignettes/uStarCases.Rmd @@ -19,7 +19,7 @@ knitr::opts_chunk$set(eval = !is_check) ```{r setup, include = FALSE} library(knitr) -#rmarkdown::render("vignettes/uStarCases.Rmd") +#rmarkdown::render("vignettes/uStarCases.Rmd","md_document") opts_knit$set(root.dir = '..') opts_chunk$set( #, fig.align = "center" @@ -116,7 +116,7 @@ Output columns use the suffix as specified by argument `uSstarSuffix` which defaults to "uStar". ```{r singleUStarGapfill, message = FALSE} -#usGetAnnualSeasonUStarMap(EProc$sUSTAR_DETAILS$uStarTh) +#EProc$useAnnualUStarThresholds() EProc$sMDSGapFillAfterUstar('NEE') grep("NEE.*_f$",names(EProc$sExportResults()), value = TRUE) ``` @@ -175,11 +175,21 @@ grep("NEE_.*_f$",names(EProc$sExportResults()), value = TRUE) ```{r uStarScenMRPart, message=FALSE} EProc$sSetLocationInfo(LatDeg = 51.0, LongDeg = 13.6, TimeZoneHour = 1) EProc$sMDSGapFill('Tair', FillAll = FALSE, minNWarnRunLength = NA) +EProc$sMDSGapFill('Rg', FillAll = FALSE, minNWarnRunLength = NA) EProc$sMDSGapFill('VPD', FillAll = FALSE, minNWarnRunLength = NA) EProc$sMRFluxPartitionUStarScens() grep("GPP_.*_f$",names(EProc$sExportResults()), value = TRUE) +if (FALSE) { + # run only interactively, because it takes long + EProc$sGLFluxPartitionUStarScens(uStarScenKeep = "U50") + grep("GPP_DT_.*_f$",names(EProc$sExportResults()), value = TRUE) +} ``` +The argument `uStarScenKeep = "U50"` specifies that the outputs that +are not distinguished by the suffix, e.g. `FP_GPP2000`, should be reported for the +median u* threshold scenario with suffix `U50`, instead of the default first scenario. + ## See also A more advanced case of user-specified seasons for uStar threshold estimate is given in [`vignette('DEGebExample')`](DEGebExample.html). diff --git a/vignettes/uStarCases.md b/vignettes/uStarCases.md index 634e07e..79a06c3 100644 --- a/vignettes/uStarCases.md +++ b/vignettes/uStarCases.md @@ -80,7 +80,7 @@ Next, the annual estimate is used as the default in gap-filling. Output columns use the suffix as specified by argument `uSstarSuffix` which defaults to "uStar". - #usGetAnnualSeasonUStarMap(EProc$sUSTAR_DETAILS$uStarTh) + #EProc$useAnnualUStarThresholds() EProc$sMDSGapFillAfterUstar('NEE') ## Warning in .self$sGetUstarScenarios(): uStar scenarios not set yet. Setting @@ -113,8 +113,8 @@ bootstrap. ## ## Estimated UStar distribution of: - ## uStar 5% 50% 95% - ## 1 0.41625 0.3882803 0.4496154 0.6242549 + ## uStar 5% 50% 95% + ## 1 0.41625 0.378475 0.4524588 0.6209465 ## by using 100 bootstrap samples and controls: ## taClasses UstarClasses ## 7 20 @@ -128,12 +128,12 @@ bootstrap. # inspect the thresholds to be used by default EProc$sGetUstarScenarios() - ## season uStar U05 U50 U95 - ## 1 1998001 0.41625 0.3882803 0.4496154 0.6242549 - ## 2 1998003 0.41625 0.3882803 0.4496154 0.6242549 - ## 3 1998006 0.41625 0.3882803 0.4496154 0.6242549 - ## 4 1998009 0.41625 0.3882803 0.4496154 0.6242549 - ## 5 1998012 0.41625 0.3882803 0.4496154 0.6242549 + ## season uStar U05 U50 U95 + ## 1 1998001 0.41625 0.378475 0.4524588 0.6209465 + ## 2 1998003 0.41625 0.378475 0.4524588 0.6209465 + ## 3 1998006 0.41625 0.378475 0.4524588 0.6209465 + ## 4 1998009 0.41625 0.378475 0.4524588 0.6209465 + ## 5 1998012 0.41625 0.378475 0.4524588 0.6209465 By default the annually aggregated threshold estimates are used for each season within one year as in the original method publication. To see the @@ -143,21 +143,21 @@ estimates for different aggregation levels, use method (uStarThAgg <- EProc$sGetEstimatedUstarThresholdDistribution()) ## aggregationMode seasonYear season uStar 5% 50% - ## 1 single NA 0.4162500 0.3882803 0.4496154 - ## 2 year 1998 0.4162500 0.3882803 0.4496154 - ## 3 season 1998 1998001 0.4162500 0.3882803 0.4496154 - ## 4 season 1998 1998003 0.4162500 0.3240417 0.4009091 - ## 5 season 1998 1998006 0.3520000 0.3256167 0.3959167 - ## 6 season 1998 1998009 0.3369231 0.2464792 0.3900000 - ## 7 season 1998 1998012 0.1740000 0.1746333 0.4206250 + ## 1 single NA 0.4162500 0.3784750 0.4524588 + ## 2 year 1998 0.4162500 0.3784750 0.4524588 + ## 3 season 1998 1998001 0.4162500 0.3784750 0.4524588 + ## 4 season 1998 1998003 0.4162500 0.3289559 0.4000000 + ## 5 season 1998 1998006 0.3520000 0.3318286 0.3864683 + ## 6 season 1998 1998009 0.3369231 0.2297673 0.4044653 + ## 7 season 1998 1998012 0.1740000 0.1849500 0.4325682 ## 95% - ## 1 0.6242549 - ## 2 0.6242549 - ## 3 0.6242549 - ## 4 0.5619931 - ## 5 0.4500000 - ## 6 0.5224006 - ## 7 0.5778408 + ## 1 0.6209465 + ## 2 0.6209465 + ## 3 0.6209465 + ## 4 0.5890722 + ## 5 0.4483500 + ## 6 0.5360426 + ## 7 0.5890722 In conjunction with method `usGetSeasonalSeasonUStarMap` and `sEddyProc_sSetUstarScenarios` this can be used to set seasonally @@ -171,11 +171,11 @@ different u\* threshold. However, this common case supported by method EProc$sGetUstarScenarios() ## season uStar U05 U50 U95 - ## 3 1998001 0.4162500 0.3882803 0.4496154 0.6242549 - ## 4 1998003 0.4162500 0.3240417 0.4009091 0.5619931 - ## 5 1998006 0.3520000 0.3256167 0.3959167 0.4500000 - ## 6 1998009 0.3369231 0.2464792 0.3900000 0.5224006 - ## 7 1998012 0.1740000 0.1746333 0.4206250 0.5778408 + ## 3 1998001 0.4162500 0.3784750 0.4524588 0.6209465 + ## 4 1998003 0.4162500 0.3289559 0.4000000 0.5890722 + ## 5 1998006 0.3520000 0.3318286 0.3864683 0.4483500 + ## 6 1998009 0.3369231 0.2297673 0.4044653 0.5360426 + ## 7 1998012 0.1740000 0.1849500 0.4325682 0.5890722 Several function whose name ends with 'UstarScens' perform the subsequent processing steps for all uStar scenarios. They operate and @@ -188,11 +188,23 @@ create columns that differ between threshold scenarios by a suffix. EProc$sSetLocationInfo(LatDeg = 51.0, LongDeg = 13.6, TimeZoneHour = 1) EProc$sMDSGapFill('Tair', FillAll = FALSE, minNWarnRunLength = NA) + EProc$sMDSGapFill('Rg', FillAll = FALSE, minNWarnRunLength = NA) EProc$sMDSGapFill('VPD', FillAll = FALSE, minNWarnRunLength = NA) EProc$sMRFluxPartitionUStarScens() grep("GPP_.*_f$",names(EProc$sExportResults()), value = TRUE) - ## [1] "GPP_uStar_f" "GPP_U05_f" "GPP_U50_f" "GPP_U95_f" + ## [1] "GPP_U95_f" "GPP_U50_f" "GPP_U05_f" "GPP_uStar_f" + + if (FALSE) { + # run only interactively, because it takes long + EProc$sGLFluxPartitionUStarScens(uStarScenKeep = "U50") + grep("GPP_DT_.*_f$",names(EProc$sExportResults()), value = TRUE) + } + +The argument `uStarScenKeep = "U50"` specifies that the outputs that are +not distinguished by the suffix, e.g. `FP_GPP2000`, should be reported +for the median u\* threshold scenario with suffix `U50`, instead of the +default first scenario. See also --------