diff --git a/NAMESPACE b/NAMESPACE index ef0bfd711b15a1a86119c00b44dfce69c7a8edf2..50c19d9c68bca03a3886d7e0c6ae9655d12b7ee3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -14,6 +14,8 @@ export(PlotForecastPDF) export(PlotMostLikelyQuantileMap) export(RFSlope) export(RainFARM) +export(as.s2dv_cube) +export(s2dv_cube) import(ggplot2) import(multiApply) import(ncdf4) diff --git a/R/CST_Load.R b/R/CST_Load.R index 66535583735c120572a770f6fc7cf9bbc50f017f..76d5deb3335941151a227f174122027828eb7eee 100644 --- a/R/CST_Load.R +++ b/R/CST_Load.R @@ -37,75 +37,6 @@ #' } CST_Load <- function(...) { exp <- Load(...) - - if (is.null(exp) || (is.null(exp$mod) && is.null(exp$obs))) { - stop("The s2dverification::Load call did not return any data.") - } - - obs <- exp - obs$mod <- NULL - exp$obs <- NULL - names(exp)[[1]] <- 'data' - names(obs)[[1]] <- 'data' - - remove_matches <- function(v, patterns) { - if (length(v) > 0) { - matches <- c() - for (pattern in patterns) { - matches <- c(matches, which(grepl(pattern, v))) - } - if (length(matches) > 0) { - v <- v[-matches] - } - } - v - } - - harmonize_patterns <- function(v) { - matches <- grepl('.*\\.nc$', v) - if (sum(!matches) > 0) { - match_indices <- which(!matches) - v[match_indices] <- sapply(v[match_indices], function(x) paste0(x, '*')) - } - v <- glob2rx(v) - v <- gsub('\\$.*\\$', '*', v) - v - } - - if (!is.null(obs$data)) { - obs$Datasets$exp <- NULL - obs$Datasets <- obs$Datasets$obs - obs_path_patterns <- sapply(obs$Datasets, function(x) attr(x, 'source')) - obs_path_patterns <- harmonize_patterns(obs_path_patterns) - } - - if (!is.null(exp$data)) { - exp$Datasets$obs <- NULL - exp$Datasets <- exp$Datasets$exp - exp_path_patterns <- sapply(exp$Datasets, function(x) attr(x, 'source')) - exp_path_patterns <- harmonize_patterns(exp_path_patterns) - } - - if (!is.null(obs$data) && !is.null(exp$data)) { - obs$source_files <- remove_matches(obs$source_files, - exp_path_patterns) - obs$not_found_files <- remove_matches(obs$not_found_files, - exp_path_patterns) - - exp$source_files <- remove_matches(exp$source_files, - obs_path_patterns) - exp$not_found_files <- remove_matches(exp$not_found_files, - obs_path_patterns) - } - - result <- list() - if (!is.null(exp$data)) { - class(exp) <- 's2dv_cube' - result$exp <- exp - } - if (!is.null(obs$data)) { - class(obs) <- 's2dv_cube' - result$obs <- obs - } + result <- as.s2dv_cube(exp) result } diff --git a/R/as.s2dv_cube.R b/R/as.s2dv_cube.R new file mode 100644 index 0000000000000000000000000000000000000000..c8e05365a02e02a17cee340317234c20f5134e7e --- /dev/null +++ b/R/as.s2dv_cube.R @@ -0,0 +1,155 @@ +#'Conversion of 'startR_array' or 'list' objects to 's2dv_cube' +#' +#'This function converts data loaded using startR package or s2dverification Load function into a 's2dv_cube' object. +#' +#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} +#'@author Nicolau Manubens, \email{nicolau.manubens@bsc.es} +#' +#'@param object an object of class 'startR_array' generated from function \code{Start} from startR package (version 0.1.3 from earth.bsc.es/gitlab/es/startR) or a list output from function \code{Load} from s2dverification package. +#' +#'@return The function returns a 's2dv_cube' object to be easily used with functions \code{CST} from CSTools package. +#' +#'@seealso \code{\link{s2dv_cube}}, \code{\link[s2dverification]{Load}}, \code{\link[startR]{Start}} and \code{\link{CST_Load}} +#'@examples +#'\dontrun{ +#'library(startR) +#'repos <- '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' +#'data <- Start(dat = repos, +#' var = 'tas', +#' sdate = c('20170101', '20180101'), +#' ensemble = indices(1:20), +#' time = 'all', +#' latitude = 'all', +#' longitude = indices(1:40), +#' return_vars = list(latitude = 'dat', longitude = 'dat', time = 'sdate'), +#' retrieve = TRUE) +#'data <- as.s2dv_cube(data) +#'class(data) +#'startDates <- c('20001101', '20011101', '20021101', +#' '20031101', '20041101', '20051101') +#'data <- Load(var = 'tas', exp = 'system5c3s', +#' nmember = 15, sdates = startDates, +#' leadtimemax = 3, latmin = 27, latmax = 48, +#' lonmin = -12, lonmax = 40, output = 'lonlat') +#'data <- as.s2dv_cube(data) +#'class(data) +#'} +#'@export +as.s2dv_cube <- function(object) { + if (is.list(object)) { + if (is.null(object) || (is.null(object$mod) && is.null(object$obs))) { + stop("The s2dverification::Load call did not return any data.") + } + obs <- object + obs$mod <- NULL + object$obs <- NULL + names(object)[[1]] <- 'data' + names(obs)[[1]] <- 'data' + remove_matches <- function(v, patterns) { + if (length(v) > 0) { + matches <- c() + for (pattern in patterns) { + matches <- c(matches, which(grepl(pattern, v))) + } + if (length(matches) > 0) { + v <- v[-matches] + } + } + v + } + + harmonize_patterns <- function(v) { + matches <- grepl('.*\\.nc$', v) + if (sum(!matches) > 0) { + match_indices <- which(!matches) + v[match_indices] <- sapply(v[match_indices], function(x) paste0(x, '*')) + } + v <- glob2rx(v) + v <- gsub('\\$.*\\$', '*', v) + v + } + + if (!is.null(obs$data)) { + obs$Datasets$exp <- NULL + obs$Datasets <- obs$Datasets$obs + obs_path_patterns <- sapply(obs$Datasets, function(x) attr(x, 'source')) + obs_path_patterns <- harmonize_patterns(obs_path_patterns) + } + + if (!is.null(object$data)) { + object$Datasets$obs <- NULL + object$Datasets <- object$Datasets$exp + exp_path_patterns <- sapply(object$Datasets, function(x) attr(x, 'source')) + exp_path_patterns <- harmonize_patterns(exp_path_patterns) + } + + if (!is.null(obs$data) && !is.null(object$data)) { + obs$source_files <- remove_matches(obs$source_files, + exp_path_patterns) + obs$not_found_files <- remove_matches(obs$not_found_files, + exp_path_patterns) + + object$source_files <- remove_matches(object$source_files, + obs_path_patterns) + object$not_found_files <- remove_matches(object$not_found_files, + obs_path_patterns) + } + + result <- list() + if (!is.null(object$data)) { + class(object) <- 's2dv_cube' + result$exp <- object + } + if (!is.null(obs$data)) { + class(obs) <- 's2dv_cube' + result$obs <- obs + } + if (is.list(result)) { + if (is.null(result$exp)) { + result <- result$obs + } else if (is.null(result$obs)) { + result <- result$exp + } else { + warning("The output is a list of two 's2dv_cube' objects", + " corresponding to 'exp' and 'obs'.") + } + } + + } else if (class(object) == 'startR_array') { + result <- list() + result$data <- as.vector(object) + dim(result$data) <- dim(object) + result$lon <- attributes(object)$Variables$dat1$longitude + result$lat <- attributes(object)$Variables$dat1$latitude + vars <- which(names(attributes(object)$Variables$common) != 'time') + if (length(vars) > 1) { + warning("More than one variable has been provided and ", + "only the first one will be used.") + vars <- vars[1] + } + Variable <- list() + Variable$varName <- names(attributes(object)$Variables$common)[vars] + attr(Variable, 'variable') <- attributes(object)$Variables$common[[vars]] + result$Variable <- Variable + dims <- dim(object) + if (any(c('sdate', 'sdates') %in% names(dims))) { + n_sdates <- dims[which(names(dims) == 'sdate' | names(dims) == 'sdates')] + sdates <- attributes(object)$Variables$common$time[1 : n_sdates] + } else { + sdates <- attributes(object)$Variables$common$time[1] + } + Dataset <- list(list(InitializationDates = list(Member_1 = sdates))) + names(Dataset) <- list(deparse(substitute(object))) + result$Datasets <- Dataset + result$Dates$start <- attributes(object)$Variables$common$time + result$when <- Sys.time() + result$source_files <- as.vector(attributes(object)$Files) + result$load_parameters <- attributes(object)$FileSelectors + class(result) <- 's2dv_cube' + } else { + stop("The class of parameter 'object' is not implemented", + " to be converted into 's2dv_cube' class yet.") + } + result + +} diff --git a/R/s2dv_cube.R b/R/s2dv_cube.R new file mode 100644 index 0000000000000000000000000000000000000000..897201194fb98b2c7f9c764bd45c472c10918f32 --- /dev/null +++ b/R/s2dv_cube.R @@ -0,0 +1,176 @@ +#'Creation of a 's2dv_cube' object +#' +#'@description This function allows to create a 's2dv_cube' object by passing information through its parameters. This function will be needed if the data hasn't been loaded using CST_Load or has been transformed with other methods. A 's2dv_cube' object has many different components including metadata. This function will allow to create 's2dv_cube' objects even if not all elements are defined and for each expected missed parameter a warning message will be returned. +#' +#'@author Perez-Zanon Nuria, \email{nuria.perez@bsc.es} +#' +#'@param data an array with any number of named dimensions, typically an object output from CST_Load, with the following dimensions: dataset, member, sdate, ftime, lat and lon. +#'@param lon an array with one dimension containing the longitudes and attributes: dim, cdo_grid_name, data_across_gw, array_across_gw, first_lon, last_lon and projection. +#'@param lat an array with one dimension containing the latitudes and attributes: dim, cdo_grid_name, first_lat, last_lat and projection. +#'@param Variable a list of two elements: \code{varName} a character string indicating the abbreviation of a variable name and \code{level} a character string indicating the level (e.g., "2m"), if it is not required it could be set as NULL. +#'@param Datasets a named list with the dataset model with two elements: \code{InitiatlizationDates}, containing a list of the start dates for each member named with the names of each member, and \code{Members} containing a vector with the member names (e.g., "Member_1") +#'@param Dates a named list of two elements: \code{start}, an array of dimensions (sdate, time) with the POSIX initial date of each forecast time of each starting date, and \code{end}, an array of dimensions (sdate, time) with the POSIX final date of each forecast time of each starting date. +#'@param when a time stamp of the date issued by the Load() call to obtain the data. +#'@param source_files a vector of character strings with complete paths to all the found files involved in the Load() call. +#' +#'@return The function returns an object of class 's2dv_cube'. +#' +#'@seealso \code{\link[s2dverification]{Load}} and \code{\link{CST_Load}} +#'@examples +#'exp_original <- 1:100 +#'dim(exp_original) <- c(lat = 2, time = 10, lon = 5) +#'exp1 <- s2dv_cube(data = exp_original) +#'class(exp1) +#'exp2 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50)) +#'class(exp2) +#'exp3 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m')) +#'class(exp3) +#'exp4 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m'), +#' Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), +#' end = paste0(rep("31", 10), rep("01", 10), 1990:1999))) +#'class(exp4) +#'exp5 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m'), +#' Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), +#' end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), +#' when = "2019-10-23 19:15:29 CET") +#'class(exp5) +#'exp6 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m'), +#' Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), +#' end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), +#' when = "2019-10-23 19:15:29 CET", +#' source_files = c("/path/to/file1.nc", "/path/to/file2.nc")) +#'class(exp6) +#'exp7 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m'), +#' Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), +#' end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), +#' when = "2019-10-23 19:15:29 CET", +#' source_files = c("/path/to/file1.nc", "/path/to/file2.nc"), +#' Datasets = list( +#' exp1 = list(InitializationsDates = list(Member_1 = "01011990", +#' Members = "Member_1")))) +#'class(exp7) +#'dim(exp_original) <- c(dataset = 1, member = 1, sdate = 2, ftime = 5, lat = 2, lon = 5) +#'exp8 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), +#' Variable = list(varName = 'tas', level = '2m'), +#' Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), +#' end = paste0(rep("31", 10), rep("01", 10), 1990:1999))) +#'class(exp8) +#'@export +s2dv_cube <- function(data, lon = NULL, lat = NULL, Variable = NULL, Datasets = NULL, + Dates = NULL, when = NULL, source_files = NULL) { + + if (is.null(data) | !is.array(data) | is.null(names(dim(data)))) { + stop("Parameter 'data' must be an array with named dimensions.") + } + dims <- dim(data) + if (is.null(lon)) { + if (!any(c('lon', 'longitude') %in% names(dims))) { + warning("Parameter 'lon' is not provided but data contains a ", + "longitudinal dimension.") + } else { + warning("Parameter 'lon' is not provided so the data is from an ", + "unknown location.") + } + } + if (is.null(lat)) { + if (!any(c('lat', 'latitude') %in% names(dims))) { + warning("Parameter 'lat' is not provided but data contains a ", + "latitudinal dimension.") + } else { + warning("Parameter 'lat' is not provided so the data is from an ", + "unknown location.") + } + } + if (is.null(Variable)) { + warning("Parameter 'Variable' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + } + if (is.null(Datasets)) { + warning("Parameter 'Datasets' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + } + if (is.null(Dates)) { + if (!any(c('time', 'ftime', 'sdate') %in% names(dims))) { + warning("Parameter 'Dates' is not provided but data contains a ", + "temporal dimension.") + } else { + warning("Parameter 'Dates' is not provided so the data is from an ", + "unknown time period.") + } + } + if (is.null(when)) { + warning("Parameter 'when' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + } + if (is.null(source_files)) { + warning("Parameter 'source_files' is not provided so the metadata ", + "of 's2dv_cube' object will be incomplete.") + } + if (!is.null(Variable)) { + if (!is.list(Variable)) { + Variable <- list(Variable) + } + if (names(Variable)[1] != 'varName' | names(Variable)[2] != 'level') { + warning("The name of the first elment of parameter 'Variable' is ", + "expected to be 'varName' and the second 'level'.") + } + if (!is.character(Variable[[1]])) { + warning("The element 'Varname' of parameter 'Variable' must be ", + "a character.") + } + } + # Dimensions comparison + if (!is.null(lon)) { + if (any(names(dims) %in% c('lon', 'longitude'))) { + if (dims[(names(dims) %in% c('lon', 'longitude'))] != length(lon) & + dims[(names(dims) %in% c('lon', 'longitude'))] != 1) { + stop("Length of parameter 'lon' doesn't match the length of ", + "longitudinal dimension in parameter 'data'.") + } + } + } + if (!is.null(lat)) { + if (any(names(dims) %in% c('lat', 'latitude'))) { + if (dims[(names(dims) %in% c('lat', 'latitude'))] != length(lat) & + dims[(names(dims) %in% c('lat', 'latitude'))] != 1) { + stop("Length of parameter 'lat' doesn't match the length of ", + "latitudinal dimension in parameter 'data'.") + } + } + } + if (!is.null(Dates)) { + if (!is.list(Dates)) { + stop("Parameter 'Dates' must be a list.") + } else { + if (length(Dates) > 2) { + warning("Parameter 'Dates' is a list with more than 2 ", + "elements and only the first two will be used.") + Dates <- Dates[1 : 2] + } + if (names(Dates)[1] != 'start' | names(Dates)[2] != 'end') { + warning("The name of the first element of parameter 'Dates' ", + "is expected to be 'start' and the second 'end'.") + } + if (length(Dates[[1]]) != length(Dates[[2]]) & + length(Dates) == 2) { + stop("The length of the elements in parameter 'Dates' must ", + "be equal.") + } + time_dims <- dims[names(dims) %in% c('sdate', 'time', 'ftime')] + if (prod(time_dims) != length(Dates[[1]])) { + stop("The length of the temporal dimension doesn't match ", + " with the length of elements in parameter 'Dates'.") + } + } + } + object <- list(data = data, lon = lon, lat = lat, Variable = Variable, + Datasets = Datasets, Dates = Dates, when = when, + source_files = source_files) + class(object) <- 's2dv_cube' + return(object) +} diff --git a/man/as.s2dv_cube.Rd b/man/as.s2dv_cube.Rd new file mode 100644 index 0000000000000000000000000000000000000000..13a2a296d97fd9cf9b9786b9d0190627688aba86 --- /dev/null +++ b/man/as.s2dv_cube.Rd @@ -0,0 +1,51 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/as.s2dv_cube.R +\name{as.s2dv_cube} +\alias{as.s2dv_cube} +\title{Conversion of 'startR_array' or 'list' objects to 's2dv_cube'} +\usage{ +as.s2dv_cube(object) +} +\arguments{ +\item{object}{an object of class 'startR_array' generated from function \code{Start} from startR package (version 0.1.3 from earth.bsc.es/gitlab/es/startR) or a list output from function \code{Load} from s2dverification package.} +} +\value{ +The function returns a 's2dv_cube' object to be easily used with functions \code{CST} from CSTools package. +} +\description{ +This function converts data loaded using startR package or s2dverification Load function into a 's2dv_cube' object. +} +\examples{ +\dontrun{ +library(startR) +repos <- '/esarchive/exp/ecmwf/system5_m1/monthly_mean/$var$_f6h/$var$_$sdate$.nc' +data <- Start(dat = repos, + var = 'tas', + sdate = c('20170101', '20180101'), + ensemble = indices(1:20), + time = 'all', + latitude = 'all', + longitude = indices(1:40), + return_vars = list(latitude = 'dat', longitude = 'dat', time = 'sdate'), + retrieve = TRUE) +data <- as.s2dv_cube(data) +class(data) +startDates <- c('20001101', '20011101', '20021101', + '20031101', '20041101', '20051101') +data <- Load(var = 'tas', exp = 'system5c3s', + nmember = 15, sdates = startDates, + leadtimemax = 3, latmin = 27, latmax = 48, + lonmin = -12, lonmax = 40, output = 'lonlat') +data <- as.s2dv_cube(data) +class(data) +} +} +\author{ +Perez-Zanon Nuria, \email{nuria.perez@bsc.es} + +Nicolau Manubens, \email{nicolau.manubens@bsc.es} +} +\seealso{ +\code{\link{s2dv_cube}}, \code{\link[s2dverification]{Load}}, \code{\link[startR]{Start}} and \code{\link{CST_Load}} +} + diff --git a/man/s2dv_cube.Rd b/man/s2dv_cube.Rd new file mode 100644 index 0000000000000000000000000000000000000000..48af7bbb7a04235c90a947dbba2a72919033d392 --- /dev/null +++ b/man/s2dv_cube.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/s2dv_cube.R +\name{s2dv_cube} +\alias{s2dv_cube} +\title{Creation of a 's2dv_cube' object} +\usage{ +s2dv_cube(data, lon = NULL, lat = NULL, Variable = NULL, + Datasets = NULL, Dates = NULL, when = NULL, source_files = NULL) +} +\arguments{ +\item{data}{an array with any number of named dimensions, typically an object output from CST_Load, with the following dimensions: dataset, member, sdate, ftime, lat and lon.} + +\item{lon}{an array with one dimension containing the longitudes and attributes: dim, cdo_grid_name, data_across_gw, array_across_gw, first_lon, last_lon and projection.} + +\item{lat}{an array with one dimension containing the latitudes and attributes: dim, cdo_grid_name, first_lat, last_lat and projection.} + +\item{Variable}{a list of two elements: \code{varName} a character string indicating the abbreviation of a variable name and \code{level} a character string indicating the level (e.g., "2m"), if it is not required it could be set as NULL.} + +\item{Datasets}{a named list with the dataset model with two elements: \code{InitiatlizationDates}, containing a list of the start dates for each member named with the names of each member, and \code{Members} containing a vector with the member names (e.g., "Member_1")} + +\item{Dates}{a named list of two elements: \code{start}, an array of dimensions (sdate, time) with the POSIX initial date of each forecast time of each starting date, and \code{end}, an array of dimensions (sdate, time) with the POSIX final date of each forecast time of each starting date.} + +\item{when}{a time stamp of the date issued by the Load() call to obtain the data.} + +\item{source_files}{a vector of character strings with complete paths to all the found files involved in the Load() call.} +} +\value{ +The function returns an object of class 's2dv_cube'. +} +\description{ +This function allows to create a 's2dv_cube' object by passing information through its parameters. This function will be needed if the data hasn't been loaded using CST_Load or has been transformed with other methods. A 's2dv_cube' object has many different components including metadata. This function will allow to create 's2dv_cube' objects even if not all elements are defined and for each expected missed parameter a warning message will be returned. +} +\examples{ +exp_original <- 1:100 +dim(exp_original) <- c(lat = 2, time = 10, lon = 5) +exp1 <- s2dv_cube(data = exp_original) +class(exp1) +exp2 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50)) +class(exp2) +exp3 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m')) +class(exp3) +exp4 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m'), + Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), + end = paste0(rep("31", 10), rep("01", 10), 1990:1999))) +class(exp4) +exp5 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m'), + Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), + end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), + when = "2019-10-23 19:15:29 CET") +class(exp5) +exp6 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m'), + Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), + end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), + when = "2019-10-23 19:15:29 CET", + source_files = c("/path/to/file1.nc", "/path/to/file2.nc")) +class(exp6) +exp7 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m'), + Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), + end = paste0(rep("31", 10), rep("01", 10), 1990:1999)), + when = "2019-10-23 19:15:29 CET", + source_files = c("/path/to/file1.nc", "/path/to/file2.nc"), + Datasets = list( + exp1 = list(InitializationsDates = list(Member_1 = "01011990", + Members = "Member_1")))) +class(exp7) +dim(exp_original) <- c(dataset = 1, member = 1, sdate = 2, ftime = 5, lat = 2, lon = 5) +exp8 <- s2dv_cube(data = exp_original, lon = seq(-10, 10, 5), lat = c(45, 50), + Variable = list(varName = 'tas', level = '2m'), + Dates = list(start = paste0(rep("01", 10), rep("01", 10), 1990:1999), + end = paste0(rep("31", 10), rep("01", 10), 1990:1999))) +class(exp8) +} +\author{ +Perez-Zanon Nuria, \email{nuria.perez@bsc.es} +} +\seealso{ +\code{\link[s2dverification]{Load}} and \code{\link{CST_Load}} +} +