diff --git a/R/MergeRefToExp.R b/R/MergeRefToExp.R index 365ceb51178df6135dce1ea09956d7b4f1a0f1d8..a5cfc206b46aa5e5de2c4193ca3f0657309925af 100644 --- a/R/MergeRefToExp.R +++ b/R/MergeRefToExp.R @@ -143,10 +143,14 @@ MergeRefToExp <- function(data1, dates1, start1, end1, data2, dates2, start2, en names(dim(data2)) <- time_dim } if (is.null(dim(dates1))) { + warning("Dimensions in 'dates1' element are missed and ", + "all data would be used.") dim(dates1) <- length(dates1) names(dim(dates1)) <- time_dim } if (is.null(dim(dates2))) { + warning("Dimensions in 'dates2' element are missed and ", + "all data would be used.") dim(dates2) <- length(dates2) names(dim(dates2)) <- time_dim } diff --git a/R/SelectPeriodOnData.R b/R/SelectPeriodOnData.R index a6f9c295a37dd5c2e4051ec5a9d42b14dee1231f..85b7ff33d7d3a35e0a95df96f1fcab636df1faca 100644 --- a/R/SelectPeriodOnData.R +++ b/R/SelectPeriodOnData.R @@ -121,6 +121,11 @@ SelectPeriodOnData <- function(data, dates, start, end, res <- Apply(list(data, res), target_dims = time_dim, fun = function(x, y) { res <- x[y] + if (is.null(dim(res))) { + dim(res) <- 1 + names(dim(res)) <- time_dim + } + return(res) }, output_dims = time_dim, ncores = ncores)$output1 } return(res) diff --git a/tests/testthat/test-MergeRefToExp.R b/tests/testthat/test-MergeRefToExp.R index a74df9036afb1fe82b70265012269ed9fbf1de64..b4503d86f34abf8c1348f4dafc7cd82dedc32d46 100644 --- a/tests/testthat/test-MergeRefToExp.R +++ b/tests/testthat/test-MergeRefToExp.R @@ -11,25 +11,81 @@ test_that("Sanity checks", { as.Date("01-12-1994", "%d-%m-%Y", tz = 'UTC'), "day") dim(ref_dates) <- c(ftime = 350, sdate = 2) ref <- array(1001:1700, c(ftime = 350, sdate = 2)) - data <- array(1:(2*154*2), c(ftime = 154, sdate = 2, member= 2)) + data <- array(1:(2 * 154 * 2), c(ftime = 154, sdate = 2, member= 2)) + +suppressWarnings( ref <- CSTools::s2dv_cube(data = ref, Dates = list(start = ref_dates, end = ref_dates)) +) +suppressWarnings( data <- CSTools::s2dv_cube(data = data, Dates = list(start = data_dates, end = data_dates)) - +) +suppressWarnings( expect_equal(CST_MergeRefToExp(data1 = ref, data2 = data, start1 = list(21, 6), end1 = list(30, 6), start2 = list(1, 7), end2 = list(21, 9))$Dates, SelectPeriodOnDates(ref_dates, start = list(21, 6), end = list(21,9))) +) output <- array(c(1172:1181, 1:83, 1537:1546, 155:237, 1172:1181, 309:391, 1537:1546, 463:545), c(ftime = 93, sdate = 2, member = 2)) +suppressWarnings( expect_equal(CST_MergeRefToExp(data1 = ref, data2 = data, start1 = list(21, 6), end1 = list(30, 6), start2 = list(1, 7), end2 = list(21, 9))$data, output) - }) +) + + # issue 13: One lead time + data_dates <- c(as.Date("01-06-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-07-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-06-1994", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-07-1994","%d-%m-%Y", tz = 'UTC')) + + dim(data_dates) <- c(ftime = 2, sdate = 2) + ref_dates <- c(as.Date("01-05-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-05-1994", "%d-%m-%Y", tz = 'UTC')) + dim(ref_dates) <- c(ftime = 1, sdate = 2) + ref <- array(1:2, c(ftime = 1, sdate = 2)) + data <- array(1:(2 * 3 * 2), c(ftime = 2, sdate = 2, member = 3)) + +suppressWarnings( + ref <- CSTools::s2dv_cube(data = ref, Dates = list(start = ref_dates, + end = ref_dates)) +) +suppressWarnings( + data <- CSTools::s2dv_cube(data = data, Dates = list(start = data_dates, + end = data_dates)) +) + res_dates <- c(as.Date("01-05-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-06-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-07-1993", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-05-1994", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-06-1994", "%d-%m-%Y", tz = 'UTC'), + as.Date("01-07-1994","%d-%m-%Y", tz = 'UTC')) + dim(res_dates) <- c(ftime = 3, sdate = 2) + +suppressWarnings( + expect_equal(CST_MergeRefToExp(data1 = ref, data2 = data, start1 = list(1, 5), + end1 = list(31, 5), start2 = list(1, 6), + end2 = list(31, 7))$Dates, + res_dates) +) + + output <- abind::abind(t(matrix(rep(1:2, 3), ncol = 2, nrow = 3, byrow = T)), + data$data, along = 1) + names(dim(output)) <- c('ftime', 'sdate', 'member') + +suppressWarnings( + expect_equal(CST_MergeRefToExp(data1 = ref, data2 = data, start1 = list(1, 5), + end1 = list(31, 5), start2 = list(1, 6), + end2 = list(31, 7))$data, + output) +) + +}) test_that("Seasonal", { @@ -49,22 +105,32 @@ test_that("Seasonal", { dim(dates) <- dim.dates ref <- array(1:(215*25), c(ftime = 215, sdate = 25)) + +suppressWarnings( ref <- CSTools::s2dv_cube(data = ref, Dates = list(start = dates, end = dates)) +) data <- array(1:(215*25*3), c(ftime = 215, sdate = 25, member=3)) + +suppressWarnings( data <- CSTools::s2dv_cube(data = data, Dates = list(start = dates, end = dates)) +) +suppressWarnings( expect_equal(CST_MergeRefToExp(data1 = data, data2 = ref, start1 = list(21, 6), end1 = list(30, 6), start2 = list(1, 7), end2 = list(21, 9))$Dates, SelectPeriodOnDates(dates, start = list(21, 6), end = list(21,9))) +) +suppressWarnings( expect_equal(CST_MergeRefToExp(data1 = ref, data2 = data, start1 = list(21, 6), end1 = list(30, 6), start2 = list(1, 7), end2 = list(21, 9))$Dates, SelectPeriodOnDates(dates, start = list(21, 6), end = list(21,9))) +) })