Commits (3)
# Generated by roxygen2: do not edit by hand
export(AnoAgree)
export(ArrayToList)
export(Climdex)
export(CombineIndices)
export(DTRIndicator)
......
#' Split an array into list by a given array dimension
#'
#'@description This function splits an array into a list as required by PlotLayout function from package "s2dv" when parameter 'special_args' is used. The function ArrayToList allows to add names to the elements of the list in two different levels, the 'list' or the 'sublist'.
#'
#'@param data A multidimensional array.
#'@param dim A character string indicating the name of the dimension to split or an integer indicating the position of the dimension.
#'@param level A string character 'list' or 'sublist' indicating if it should be a list or a sublist. By default it creates a list.
#'@param names A vector of character strings to name the list (if it is a single string, it would be reused) or a single character string to name the elements in the sublist.
#'
#'@return A list of arrays of the length of the dimension set in parameter 'dim'.
#'
#'@examples
#'data <- array(1:240, c(month = 12, member = 5, time = 4))
#'# Create a list:
#'datalist <- ArrayToList(data, dim = 'month', level = 'list', names = month.name)
#'class(datalist)
#'class(datalist[[1]])
#'str(datalist)
#'# Create a sublist:
#'datalist <- ArrayToList(data, dim = 'month', level = 'sublist', names = 'dots')
#'class(datalist)
#'class(datalist[[1]])
#'class(datalist[[1]][[1]])
#'str(datalist)
#'@seealso \link[s2dv]{PlotLayout}
#'@export
ArrayToList <- function(data, dim, level = 'list', names = NULL) {
if (is.null(dim(data))) {
stop("Parameter 'data' must be an array or matrix.")
}
if (length(dim) > 1) {
warning("The lenght of parameter 'dim' is greater than 1 and only the",
" first element is used.")
dim <- dim[1]
}
if (is.numeric(dim) & dim > length(dim(data))) {
stop("Parameter 'dim' cannot exceed the length of 'data' dimensions.")
}
if (is.character(dim)) {
dim <- which(names(dim(data)) == dim)
if (identical(dim, integer(0))) {
stop("Parameter 'dim' is not found in the dimension names.")
}
}
if( !is.character(names)) {
stop("Parameter 'names' is not class character.")
}
datalist <- asplit(data, dim)
attributes(datalist) <- NULL
if (level == 'list') {
if (length(names) == 1) {
names <- rep(names, dim(data)[dim])
} else {
if (length(names) != dim(data)[dim]) {
stop("The length of parameter names could be 1 or equal to the dimension to split.")
}
}
names(datalist) <- names
} else if (level == 'sublist') {
if (length(names) > 1) {
warning("Parameter 'names' should be a single character string to name the sublist.",
"Only the first element is used.")
names <- names[1]
}
datalist <- lapply(datalist, function(x) {
res <- list(x)
names(res) <- names
return(res)})
} else {
stop("Parameter 'level' should be 'list' nor 'sublist'.")
}
return(datalist)
}
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/ArrayToList.R
\name{ArrayToList}
\alias{ArrayToList}
\title{Split an array into list by a given array dimension}
\usage{
ArrayToList(data, dim, level = "list", names = NULL)
}
\arguments{
\item{data}{A multidimensional array.}
\item{dim}{A character string indicating the name of the dimension to split or an integer indicating the position of the dimension.}
\item{level}{A string character 'list' or 'sublist' indicating if it should be a list or a sublist. By default it creates a list.}
\item{names}{A vector of character strings to name the list (if it is a single string, it would be reused) or a single character string to name the elements in the sublist.}
}
\value{
A list of arrays of the length of the dimension set in parameter 'dim'.
}
\description{
This function splits an array into a list as required by PlotLayout function from package "s2dv" when parameter 'special_args' is used. The function ArrayToList allows to add names to the elements of the list in two different levels, the 'list' or the 'sublist'.
}
\examples{
data <- array(1:240, c(month = 12, member = 5, time = 4))
# Create a list:
datalist <- ArrayToList(data, dim = 'month', level = 'list', names = month.name)
class(datalist)
class(datalist[[1]])
str(datalist)
# Create a sublist:
datalist <- ArrayToList(data, dim = 'month', level = 'sublist', names = 'dots')
class(datalist)
class(datalist[[1]])
class(datalist[[1]][[1]])
str(datalist)
}
\seealso{
\link[s2dv]{PlotLayout}
}