## 1) Efficiency when data is large (i.e. apply by chromosome)
## 2) Convenience when data is not so large (i.e. unrolling the data)
## The ranges are stored in a RangesList, while the data is stored in
## a SplitDataFrameList. The RangesList is uncompressed, because
## users will likely want to apply over each Ranges separately, as
## they are usually in separate spaces. Also, it is difficult to
## compress RangesLists, as lists containing Views or IntervalTrees
## are uncompressible. The SplitDataFrameList should be compressed,
## because it's cheap to create from a split factor and, more
## importantly, cheap to get and set columns along the entire dataset,
## which is common. Usually the data columns are atomic vectors and
## thus trivially compressed. It does, however, incur a slight
## performance penalty when applying over the RangedData.
"'value' must have same elementLengths as current 'values'"
"'value' must extend class SplitDataFrameList or DataFrame"
"rownames of 'value', if non-NULL, must match the "
"'value' must have same length and names as current 'ranges'"
"'value' must extend class RangesList or IRanges"
## if (is.null(score) && ncol(x) > 0 && is.numeric(x[[1L]]))
"number of scores must equal the number of rows"
"'ranges' and 'values' must be of the same length and have the same names"
"the names of the ranges must equal the rownames"
"names(x) must be a character vector without any NA's or duplicates"
## creates a single-element RangedData (unless splitter (space) is specified)
"since 'class(ranges)' extends RangesList, 'space' argument is ignored"
"'ranges' must be a Ranges or directly coercible to RangedData"
"'space' is a 0-length vector but length of 'ranges' is > 0"
## We make an exception to the "length(space) must be <= N" rule when
## N != 0L so we can support the direct creation of RangedData objects
## with 0 rows across 1 or more user-specified spaces like in:
"length of 'space' greater than length of 'ranges'"
"length of 'ranges' not a multiple of 'space' length"
"length of value(s) in '...' greater than length of 'ranges'"
"length of 'ranges' not a multiple of length of value(s) in '...'"
## The extraction operator delegates to the values (extracts columns)
### Supported index types: numeric, logical, character, NULL and missing.
## - list style ([i]):  subsets by range space (e.g. chromosome)
## - matrix style ([i,j]): subsets the data frame
"subscript contains NAs or out of bounds indices"
"negative and positive indices cannot be mixed"
"by a RangesList subscript is not supported"
"cannot mix row indices from different spaces"
"all arguments in '...' must be RangedData objects"
## figure out names like 'c' on an ordinary vector
"nrow(x) is not a multiple of length(f)"
"All args in '...' must have the same universe"
### S3/S4 combo for as.data.frame.RangedData
"'row.names'  must be NULL or a character vector"
### FIXME: do we want to insert NAs for out of bounds views?
"cannot coerce a RangesList object with no names "
"or duplicated names to a RangedData object"
"could not propagate the inner metadata columns of "
"'from' (accessed with 'mcols(unlist(from))') "
"to the data columns (aka values) of the returned "
"'from' must at least include a 'start' and 'end' column"
"\"unlist\" method for RangedDataList objects "