diff --git a/.Rbuildignore b/.Rbuildignore index 7c1c5baa8f03668a04b8d352020ed07372de4599..acd9e68a9a2e50eff8ef783a77b63bab66e63424 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -8,3 +8,4 @@ ^\.gitlab-ci\.yml$ ^\.vscode$ ^Rplots\.pdf$ +^ci$ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 73d31f89ad7f752944b114e78ad61f76eab5b84a..5019ac1352059b7b2b59b477057deee4cc35084f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,36 +1,14 @@ stages: - - update_packages - - build + - check - regression - - tests + - revdepcheck default: before_script: - echo "setwd(\"$(pwd)\")" > .Rprofile + - echo ".libPaths <- c(Sys.getenv(\"R_LIBS_USER\"), .libPaths())" >> .Rprofile - PATH=~/R/sources/R-${R_VERSION}/bin:$PATH - - rename "s/${R_VERSION}.airGR/airGR/" *.tar.gz - - R -e 'chooseCRANmirror(graphics = FALSE, ind = 1); pkg <- "caRamel"; pkgInst <- installed.packages()[, "Package"]; pkgMiss <- setdiff(pkg, pkgInst); if (length(pkgMiss) > 0) install.packages(pkgMiss)' - -.update_packages: - stage: update_packages - only: - refs: - - tags - - schedules - script: - - Rscript -e "update.packages(ask=FALSE, repos=\"http://cran.r-project.org\")" - -.build: - stage: build - script: - - cd .. - - echo "setwd(\"$(pwd)\")" > .Rprofile - - R CMD build airgr - - rename "s/airGR/${R_VERSION}.airGR/" airGR_*.tar.gz - - mv *.tar.gz airgr/ - artifacts: - untracked: true - expire_in: 1 week + - R -e 'remotes::install_deps(dep = T)' .regression: stage: regression @@ -40,27 +18,20 @@ default: - Rscript tests/testthat/regression_tests.R dev - Rscript tests/testthat/regression_tests.R compare +.check: + stage: check + script: + - R -e ' rcmdcheck::rcmdcheck(args = ifelse(as.logical(Sys.getenv("NOT_CRAN")), "", "--as-cran"), error_on = "warning")' + .check_not_cran: - stage: tests variables: NOT_CRAN: "true" - script: - - R CMD check airGR_*.tar.gz + extends: .check .check_as_cran: - stage: tests - script: - - R CMD check --as-cran airGR_*.tar.gz - -update_packages_patched: variables: - R_VERSION: "patched" - extends: .update_packages - -build_patched: - variables: - R_VERSION: "patched" - extends: .build + NOT_CRAN: "false" + extends: .check regression_patched: variables: @@ -93,20 +64,6 @@ check_as_cran_patched: R_VERSION: "patched" extends: .check_as_cran -update_packages_devel: - variables: - R_VERSION: "devel" - extends: .update_packages - -build_devel: - only: - refs: - - tags - - schedules - variables: - R_VERSION: "devel" - extends: .build - check_not_cran_devel: only: refs: @@ -125,35 +82,39 @@ check_as_cran_devel: R_VERSION: "devel" extends: .check_as_cran -update_packages_oldrel: - variables: - R_VERSION: "oldrel" - extends: .update_packages - -build_oldrel: +check_not_cran_oldrel: only: refs: - tags - schedules variables: R_VERSION: "oldrel" - extends: .build + extends: .check_not_cran -check_not_cran_oldrel: +check_as_cran_oldrel: only: refs: - tags - schedules variables: R_VERSION: "oldrel" - extends: .check_not_cran + extends: .check_as_cran -check_as_cran_oldrel: +revdepcheck_patched: + stage: revdepcheck only: refs: - tags - schedules variables: - R_VERSION: "oldrel" - extends: .check_as_cran - + R_VERSION: "patched" + script: + - R -e 'remotes::install_github("https://github.com/r-lib/revdepcheck")' + - R -e 'revdepcheck::revdep_check(num_workers = 2)' + - R -e 'if (any(sapply(revdepcheck::revdep_summary(), function(x) {any(x$cmp$change == 1)}))) stop()' + artifacts: + paths: + - revdep/README.md + - revdep/problems.md + - revdep/failures.md + - revdep/cran.md diff --git a/R/Calibration.R b/R/Calibration.R index 2bfceaf482145a80b51a80953787323c133f1c3c..a66c78154e42b49ab80a61db832a6327da4dd962 100644 --- a/R/Calibration.R +++ b/R/Calibration.R @@ -1,13 +1,14 @@ -Calibration <- function(InputsModel, - RunOptions, - InputsCrit, +Calibration <- function(InputsModel, + RunOptions, + InputsCrit, CalibOptions, - FUN_MOD, + FUN_MOD, FUN_CRIT, # deprecated - FUN_CALIB = Calibration_Michel, + FUN_CALIB = Calibration_Michel, FUN_TRANSFO = NULL, - verbose = TRUE) { - + verbose = TRUE, + ...) { + FUN_MOD <- match.fun(FUN_MOD) if (!missing(FUN_CRIT)) { FUN_CRIT <- match.fun(FUN_CRIT) @@ -16,10 +17,10 @@ Calibration <- function(InputsModel, if (!is.null(FUN_TRANSFO)) { FUN_TRANSFO <- match.fun(FUN_TRANSFO) } - + return(FUN_CALIB(InputsModel = InputsModel, RunOptions = RunOptions, InputsCrit = InputsCrit, CalibOptions = CalibOptions, FUN_MOD = FUN_MOD, FUN_TRANSFO = FUN_TRANSFO, - verbose = verbose)) + verbose = verbose, ...)) } diff --git a/man/Calibration.Rd b/man/Calibration.Rd index c4779f0bd4ffa5478cdaaf36a3fc4a1783e5a04a..7368556f2202b4d24ecfbc9badb85d888fd3fd3c 100644 --- a/man/Calibration.Rd +++ b/man/Calibration.Rd @@ -16,7 +16,7 @@ Calibration algorithm that optimises the error criterion selected as objective f \usage{ Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions, FUN_MOD, FUN_CRIT, FUN_CALIB = Calibration_Michel, - FUN_TRANSFO = NULL, verbose = TRUE) + FUN_TRANSFO = NULL, verbose = TRUE, ...) } @@ -38,6 +38,8 @@ Calibration(InputsModel, RunOptions, InputsCrit, CalibOptions, \item{FUN_TRANSFO}{(optional) [function] model parameters transformation function, if the \code{FUN_MOD} used is native in the package \code{FUN_TRANSFO} is automatically defined} \item{verbose}{(optional) [boolean] boolean indicating if the function is run in verbose mode or not, default = \code{TRUE}} + +\item{...}{Further arguments to pass to \code{\link{RunModel}}} } @@ -53,11 +55,11 @@ library(airGR) data(L0123001) ## preparation of InputsModel object -InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, +InputsModel <- CreateInputsModel(FUN_MOD = RunModel_GR4J, DatesR = BasinObs$DatesR, Precip = BasinObs$P, PotEvap = BasinObs$E) ## calibration period selection -Ind_Run <- seq(which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1990-01-01"), +Ind_Run <- seq(which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1990-01-01"), which(format(BasinObs$DatesR, format = "\%Y-\%m-\%d")=="1999-12-31")) ## preparation of RunOptions object @@ -65,7 +67,7 @@ RunOptions <- CreateRunOptions(FUN_MOD = RunModel_GR4J, InputsModel = InputsModel, IndPeriod_Run = Ind_Run) ## calibration criterion: preparation of the InputsCrit object -InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) ## preparation of CalibOptions object @@ -74,24 +76,24 @@ CalibOptions <- CreateCalibOptions(FUN_MOD = RunModel_GR4J, FUN_CALIB = Calibrat ## calibration OutputsCalib <- Calibration(InputsModel = InputsModel, RunOptions = RunOptions, InputsCrit = InputsCrit, CalibOptions = CalibOptions, - FUN_MOD = RunModel_GR4J, + FUN_MOD = RunModel_GR4J, FUN_CALIB = Calibration_Michel) ## simulation Param <- OutputsCalib$ParamFinalR -OutputsModel <- RunModel(InputsModel = InputsModel, RunOptions = RunOptions, +OutputsModel <- RunModel(InputsModel = InputsModel, RunOptions = RunOptions, Param = Param, FUN = RunModel_GR4J) ## results preview plot(OutputsModel, Qobs = BasinObs$Qmm[Ind_Run]) ## efficiency criterion: Nash-Sutcliffe Efficiency -InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_NSE, InputsModel = InputsModel, RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) OutputsCrit <- ErrorCrit_NSE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) ## efficiency criterion: Kling-Gupta Efficiency -InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_KGE, InputsModel = InputsModel, +InputsCrit <- CreateInputsCrit(FUN_CRIT = ErrorCrit_KGE, InputsModel = InputsModel, RunOptions = RunOptions, Obs = BasinObs$Qmm[Ind_Run]) OutputsCrit <- ErrorCrit_KGE(InputsCrit = InputsCrit, OutputsModel = OutputsModel) } @@ -105,7 +107,7 @@ Laurent Coron, Olivier Delaigue \seealso{ \code{\link{Calibration_Michel}}, \code{\link{ErrorCrit}}, \code{\link{TransfoParam}}, -\code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, +\code{\link{CreateInputsModel}}, \code{\link{CreateRunOptions}}, \code{\link{CreateInputsCrit}}, \code{\link{CreateCalibOptions}}. }