diff --git a/DESCRIPTION b/DESCRIPTION index 1597c585718c9fec3ce1fd087784275bcb1e0202..a524f39e279848b12b82e7cb6c7c53fae54f81a9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: airGR Type: Package Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling -Version: 1.6.8.8 +Version: 1.6.8.9 Date: 2020-11-20 Authors@R: c( person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")), diff --git a/R/SeriesAggreg2.InputsModel.R b/R/SeriesAggreg2.InputsModel.R index 892e1377e40b9caa832239eb363e0987dffe4e25..5599e7ad70dd5bdfb5384985e3990b83e9031bba 100644 --- a/R/SeriesAggreg2.InputsModel.R +++ b/R/SeriesAggreg2.InputsModel.R @@ -1,14 +1,14 @@ SeriesAggreg2.InputsModel <- function(TabSeries, Format, - TimeFormat, - NewTimeFormat, + TimeFormat = NULL, + NewTimeFormat = NULL, YearFirstMonth = 1, TimeLag = 0, verbose = TRUE, ..., simplify = FALSE) { - + if (!inherits(TabSeries, "InputsModel")) { stop("to be used with 'InputsModel' object") } - + res <- SeriesAggreg2.default(TabSeries = TabSeries, Format = Format, TimeFormat = TimeFormat, @@ -16,11 +16,11 @@ SeriesAggreg2.InputsModel <- function(TabSeries, YearFirstMonth = YearFirstMonth, TimeLag = TimeLag, verbose = verbose, simplify = simplify) - + if (inherits(TabSeries, "CemaNeige")) { res$ZLayers <- TabSeries$ZLayers } - + return(res) } \ No newline at end of file diff --git a/R/SeriesAggreg2.R b/R/SeriesAggreg2.R index 2f7c4e92f7f4cb6800b6567d4a101aa99f292c04..207b92ddc94270de5429e94e78f489d817812edb 100644 --- a/R/SeriesAggreg2.R +++ b/R/SeriesAggreg2.R @@ -1,5 +1,5 @@ SeriesAggreg2 <- function(TabSeries, - Format, TimeFormat, NewTimeFormat, + Format, TimeFormat = NULL, NewTimeFormat = NULL, YearFirstMonth = 1, TimeLag = 0, verbose = TRUE, ...) { @@ -7,14 +7,14 @@ SeriesAggreg2 <- function(TabSeries, } -SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat, NewTimeFormat, +SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat = NULL, NewTimeFormat = NULL, YearFirstMonth = 1, TimeLag = 0, verbose = TRUE, ..., ConvertFun) { - + ## Arguments checks - if (!missing(TimeFormat)) { + if (!is.null(TimeFormat)) { warning("deprecated 'TimeFormat' argument", call. = FALSE) } - if (!missing(NewTimeFormat)) { + if (!is.null(NewTimeFormat)) { if (missing(Format)) { TimeStep <- c("hourly", "daily", "monthly", "yearly") NewTimeFormat <- match.arg(NewTimeFormat, choices = TimeStep) @@ -88,14 +88,14 @@ SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat, NewTimeForma if (length(TimeLag) != 1 | !any(TimeLag >= 0)) { stop(msgTimeLag) } - - + + TabSeries0 <- TabSeries colnames(TabSeries0)[1L] <- "DatesR" TabSeries0$DatesR <- TabSeries0$DatesR + TimeLag - + TabSeries2 <- TabSeries0 - + if (!Format %in% c("%d", "%m")) { start <- sprintf("%i-01-01 00:00:00", as.numeric(format(TabSeries2$DatesR[1L], format = "%Y"))-1) stop <- sprintf("%i-12-31 00:00:00", as.numeric(format(TabSeries2$DatesR[nrow(TabSeries2)], format = "%Y"))+1) @@ -106,10 +106,10 @@ SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat, NewTimeForma TabSeries2 <- merge(fakeTs, TabSeries2, by = "DatesR", all.x = TRUE) } TabSeries2$DatesRini <- TabSeries2$DatesR %in% TabSeries0$DatesR - - + + TabSeries2$Selec2 <- format(TabSeries2$DatesR, Format) - + if (nchar(Format) > 2 | Format == "%Y") { TabSeries2$Selec <- !duplicated(TabSeries2$Selec2) if (all(TabSeries2$Selec)) { @@ -133,7 +133,7 @@ SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat, NewTimeForma TabSeries2$Fac2 <- TabSeries2$Selec2 TabSeries2$Selec <- !duplicated(TabSeries2$Selec2) } - + if ("mean" %in% ConvertFun) { colTsAggregMean <- c("Fac2", colnames(TabSeries)[-1L][ConvertFun == "mean"]) tsAggregMean <- aggregate(. ~ Fac2, data = TabSeries2[, colTsAggregMean], FUN = mean, na.action = na.pass) @@ -146,13 +146,13 @@ SeriesAggreg2.data.frame <- function(TabSeries, Format, TimeFormat, NewTimeForma } else { tsAggregSum <- data.frame(a = NA, b = NA) } - + tsAggreg <- cbind(tsAggregMean, tsAggregSum) tsAggreg <- tsAggreg[, !duplicated(colnames(tsAggreg))] tsAggreg <- merge(tsAggreg, TabSeries2[, c("Fac2", "DatesR", "DatesRini", "Selec")], by = "Fac2", all.x = TRUE, all.y = FALSE) tsAggreg <- tsAggreg[tsAggreg$Selec & tsAggreg$DatesRini, ] tsAggreg <- tsAggreg[, colnames(TabSeries0)] return(tsAggreg) - + } diff --git a/R/SeriesAggreg2.default.R b/R/SeriesAggreg2.default.R index f67bc5cc34b2c8719ebe38a89dcbeb9eb7be939d..e3bb57a73410ddc8ecf7ff9a865361fb4cf3e2a3 100644 --- a/R/SeriesAggreg2.default.R +++ b/R/SeriesAggreg2.default.R @@ -1,16 +1,16 @@ SeriesAggreg2.default <- function(TabSeries, Format, - TimeFormat, - NewTimeFormat, + TimeFormat = NULL, + NewTimeFormat = NULL, YearFirstMonth = 1, TimeLag = 0, verbose = TRUE, ..., simplify = FALSE) { - + if (!inherits(TabSeries, c("InputsModel", "OutputsModel"))) { stop("to be used with InputsModel', or 'OutputsModel' object") } - + if (!inherits(TabSeries, "GR") & inherits(TabSeries, "CemaNeige")) { - ClassTabSeries <- class(TabSeries) + ClassTabSeries <- class(TabSeries) zzz <- list(zzz = rep(NaN, length(TabSeries$DatesR))) TabSeries <- append(TabSeries, values = zzz, after = 1) class(TabSeries) <- ClassTabSeries @@ -24,7 +24,7 @@ SeriesAggreg2.default <- function(TabSeries, lastCol <- "Qsim" } } - + if (inherits(TabSeries, "CemaNeige")) { if (inherits(TabSeries, "InputsModel")) { CemaNeigeLayers <- TabSeries[grep("^Layer", names(TabSeries))] @@ -50,8 +50,8 @@ SeriesAggreg2.default <- function(TabSeries, res <- as.list(res) }) } - - + + TabSeries2 <- TabSeries[1:which(names(TabSeries) %in% lastCol)] TabSeries2 <- as.data.frame.list(TabSeries2) NewTabSeries <- SeriesAggreg2(TabSeries = TabSeries2, @@ -61,25 +61,25 @@ SeriesAggreg2.default <- function(TabSeries, YearFirstMonth = YearFirstMonth, TimeLag = TimeLag, verbose = verbose) NewTabSeries$zzz <- NULL - - + + if (simplify) { - + return(NewTabSeries) - + } else { - + res <- list() ClassFormat <- switch(substr(Format, start = nchar(Format), stop = nchar(Format)), h = "hourly", d = "daily", m = "monthly", Y = "yearly") - + ## to be consistent with InputsModel class and because plot.OutputsModel use the POSIXlt class NewTabSeries$DatesR <- as.POSIXlt(NewTabSeries$DatesR) res <- as.list(NewTabSeries) - + if (inherits(TabSeries, "CemaNeige")) { if (inherits(TabSeries, "InputsModel")) { res <- c(NewTabSeries, CemaNeigeLayersAggreg) @@ -89,10 +89,10 @@ SeriesAggreg2.default <- function(TabSeries, } # res <- append(res, CemaNeigeLayersAggreg, after = length(res)) } - + class(res) <- gsub("hourly|daily|monthly|yearly", ClassFormat, class(TabSeries)) return(res) - + } - + } \ No newline at end of file diff --git a/tests/testthat/test-SeriesAggreg2.R b/tests/testthat/test-SeriesAggreg2.R new file mode 100644 index 0000000000000000000000000000000000000000..677e2e524cfbe08fb2aab7c72bb000a54607d8ba --- /dev/null +++ b/tests/testthat/test-SeriesAggreg2.R @@ -0,0 +1,14 @@ +context("SeriesAggreg2") + +test_that("No warning with InputsModel Cemaneige'", { + ## load of catchment data + data(L0123002) + ## preparation of the InputsModel object + InputsModel <- CreateInputsModel(FUN_MOD = RunModel_CemaNeige, DatesR = BasinObs$DatesR, + Precip = BasinObs$P,TempMean = BasinObs$T, + ZInputs = BasinInfo$HypsoData[51], HypsoData=BasinInfo$HypsoData, + NLayers = 5) + expect_warning( + SeriesAggreg2(InputsModel, "%m"), + regexp = NA) +})