\HeaderA{eSet}{Class to Contain High-Throughput Assays and Experimental Metadata}{eSet}
\aliasA{\$,eSet-method}{eSet}{.Rdol.,eSet.Rdash.method}
\aliasA{\$<-,eSet-method}{eSet}{.Rdol.<.Rdash.,eSet.Rdash.method}
\aliasA{abstract,eSet-method}{eSet}{abstract,eSet.Rdash.method}
\aliasA{annotation,eSet-method}{eSet}{annotation,eSet.Rdash.method}
\aliasA{annotation<-,eSet,character-method}{eSet}{annotation<.Rdash.,eSet,character.Rdash.method}
\aliasA{assayData,eSet-method}{eSet}{assayData,eSet.Rdash.method}
\aliasA{assayData<-,eSet,AssayData-method}{eSet}{assayData<.Rdash.,eSet,AssayData.Rdash.method}
\aliasA{assayDataElement}{eSet}{assayDataElement}
\aliasA{assayDataElement<\Rdash}{eSet}{assayDataElement<.Rdash.}
\aliasA{assayDataElementNames}{eSet}{assayDataElementNames}
\aliasA{assayDataElementReplace}{eSet}{assayDataElementReplace}
\aliasA{class:eSet}{eSet}{class:eSet}
\aliasA{combine,eSet,ANY-method}{eSet}{combine,eSet,ANY.Rdash.method}
\aliasA{combine,eSet,eSet-method}{eSet}{combine,eSet,eSet.Rdash.method}
\aliasA{description,eSet-method}{eSet}{description,eSet.Rdash.method}
\aliasA{description<-,eSet,MIAME-method}{eSet}{description<.Rdash.,eSet,MIAME.Rdash.method}
\aliasA{dim,eSet-method}{eSet}{dim,eSet.Rdash.method}
\aliasA{dims,eSet-method}{eSet}{dims,eSet.Rdash.method}
\aliasA{eSet-class}{eSet}{eSet.Rdash.class}
\aliasA{experimentData,eSet-method}{eSet}{experimentData,eSet.Rdash.method}
\aliasA{experimentData<-,eSet,MIAME-method}{eSet}{experimentData<.Rdash.,eSet,MIAME.Rdash.method}
\aliasA{exprs,eSet-method}{eSet}{exprs,eSet.Rdash.method}
\aliasA{exprs<-,eSet,AssayData-method}{eSet}{exprs<.Rdash.,eSet,AssayData.Rdash.method}
\aliasA{fData,eSet-method}{eSet}{fData,eSet.Rdash.method}
\aliasA{fData<-,eSet,data.frame-method}{eSet}{fData<.Rdash.,eSet,data.frame.Rdash.method}
\aliasA{featureData,eSet-method}{eSet}{featureData,eSet.Rdash.method}
\aliasA{featureData<-,eSet,AnnotatedDataFrame-method}{eSet}{featureData<.Rdash.,eSet,AnnotatedDataFrame.Rdash.method}
\aliasA{featureNames,eSet-method}{eSet}{featureNames,eSet.Rdash.method}
\aliasA{featureNames<-,eSet-method}{eSet}{featureNames<.Rdash.,eSet.Rdash.method}
\aliasA{fvarLabels,eSet-method}{eSet}{fvarLabels,eSet.Rdash.method}
\aliasA{fvarLabels<-,eSet-method}{eSet}{fvarLabels<.Rdash.,eSet.Rdash.method}
\aliasA{fvarMetadata,eSet-method}{eSet}{fvarMetadata,eSet.Rdash.method}
\aliasA{fvarMetadata<-,eSet,data.frame-method}{eSet}{fvarMetadata<.Rdash.,eSet,data.frame.Rdash.method}
\aliasA{initialize,eSet-method}{eSet}{initialize,eSet.Rdash.method}
\aliasA{listOrEnv}{eSet}{listOrEnv}
\aliasA{ncol,eSet-method}{eSet}{ncol,eSet.Rdash.method}
\aliasA{notes,eSet-method}{eSet}{notes,eSet.Rdash.method}
\aliasA{notes<-,eSet,ANY-method}{eSet}{notes<.Rdash.,eSet,ANY.Rdash.method}
\aliasA{pData,eSet-method}{eSet}{pData,eSet.Rdash.method}
\aliasA{pData<-,eSet,data.frame-method}{eSet}{pData<.Rdash.,eSet,data.frame.Rdash.method}
\aliasA{phenoData,eSet-method}{eSet}{phenoData,eSet.Rdash.method}
\aliasA{phenoData<-,eSet,AnnotatedDataFrame-method}{eSet}{phenoData<.Rdash.,eSet,AnnotatedDataFrame.Rdash.method}
\aliasA{preproc,eSet-method}{eSet}{preproc,eSet.Rdash.method}
\aliasA{preproc<-,eSet-method}{eSet}{preproc<.Rdash.,eSet.Rdash.method}
\aliasA{protocolData,eSet-method}{eSet}{protocolData,eSet.Rdash.method}
\aliasA{protocolData<-,eSet,character-method}{eSet}{protocolData<.Rdash.,eSet,character.Rdash.method}
\aliasA{pubMedIds,eSet-method}{eSet}{pubMedIds,eSet.Rdash.method}
\aliasA{pubMedIds<-,eSet,character-method}{eSet}{pubMedIds<.Rdash.,eSet,character.Rdash.method}
\aliasA{sampleNames,eSet-method}{eSet}{sampleNames,eSet.Rdash.method}
\aliasA{sampleNames<-,eSet,ANY-method}{eSet}{sampleNames<.Rdash.,eSet,ANY.Rdash.method}
\aliasA{show,eSet-method}{eSet}{show,eSet.Rdash.method}
\aliasA{storageMode,eSet-method}{eSet}{storageMode,eSet.Rdash.method}
\methaliasA{storageMode,eSet-method}{eSet}{storageMode,eSet.Rdash.method}
\aliasA{storageMode<-,eSet,character-method}{eSet}{storageMode<.Rdash.,eSet,character.Rdash.method}
\methaliasA{storageMode<-,eSet,character-method}{eSet}{storageMode<.Rdash.,eSet,character.Rdash.method}
\aliasA{SW}{eSet}{SW}
\aliasA{updateObject,eSet-method}{eSet}{updateObject,eSet.Rdash.method}
\aliasA{updateObjectTo,eSet,eSet-method}{eSet}{updateObjectTo,eSet,eSet.Rdash.method}
\aliasA{varLabels,eSet-method}{eSet}{varLabels,eSet.Rdash.method}
\aliasA{varLabels<-,eSet-method}{eSet}{varLabels<.Rdash.,eSet.Rdash.method}
\aliasA{varMetadata,eSet-method}{eSet}{varMetadata,eSet.Rdash.method}
\aliasA{varMetadata<-,eSet,data.frame-method}{eSet}{varMetadata<.Rdash.,eSet,data.frame.Rdash.method}
\aliasA{[,eSet-method}{eSet}{[,eSet.Rdash.method}
\aliasA{[[,eSet-method}{eSet}{[[,eSet.Rdash.method}
\aliasA{[[<-,eSet-method}{eSet}{[[<.Rdash.,eSet.Rdash.method}
\keyword{classes}{eSet}
\begin{Description}\relax
Container for high-throughput assays and experimental
metadata. Classes derived from \code{eSet} contain one or more
identical-sized matrices as \code{assayData} elements. Derived
classes (e.g., \code{\LinkA{ExpressionSet-class}{ExpressionSet.Rdash.class}}, \code{\LinkA{SnpSet-class}{SnpSet.Rdash.class}})
specify which elements must be present in the \code{assayData} slot.

\code{eSet} object cannot be instantiated directly; see the examples
for usage.
\end{Description}
\begin{Section}{Creating Objects}
\code{eSet} is a virtual class, so instances cannot be created.

Objects created under previous definitions of \code{eSet-class} can be
coerced to the current classes derived from \code{eSet} using
\code{updateOldESet}.
\end{Section}
\begin{Section}{Slots}
Introduced in \code{eSet}:
\describe{
\item[\code{assayData}:] Contains matrices with equal
dimensions, and with column number equal to
\code{nrow(phenoData)}. Class:\code{\LinkA{AssayData-class}{AssayData.Rdash.class}}
\item[\code{phenoData}:] Contains experimenter-supplied variables
describing sample (i.e., columns in \code{assayData}) phenotypes.
Class: \code{\LinkA{AnnotatedDataFrame-class}{AnnotatedDataFrame.Rdash.class}}
\item[\code{featureData}:] Contains variables describing features
(i.e., rows in \code{assayData}) unique to this experiment. Use
the \code{annotation} slot to efficiently reference feature data
common to the annotation package used in the experiment. Class:
\code{\LinkA{AnnotatedDataFrame-class}{AnnotatedDataFrame.Rdash.class}} 
\item[\code{experimentData}:] Contains details of experimental
methods. Class: \code{\LinkA{MIAME-class}{MIAME.Rdash.class}}
\item[\code{annotation}:] Label associated with the annotation
package used in the experiment. Class: \code{character}
\item[\code{protocolData}:] Contains microarray equipment-generated
variables describing sample (i.e., columns in \code{assayData}) phenotypes.
Class: \code{\LinkA{AnnotatedDataFrame-class}{AnnotatedDataFrame.Rdash.class}}
\item[\code{.\_\_classVersion\_\_}:] A \code{Versions} object describing
the R and Biobase version numbers used to created the instance.
Intended for developer use.
}
\end{Section}
\begin{Section}{Methods}
Methods defined in derived classes (e.g., \code{\LinkA{ExpressionSet-class}{ExpressionSet.Rdash.class}},
\code{\LinkA{SnpSet-class}{SnpSet.Rdash.class}}) may override the methods described here.

Class-specific methods:
\describe{
\item[\code{sampleNames(object)} and
\code{sampleNames(object)<-value}:] Coordinate accessing and setting
sample names in \code{assayData} and \code{phenoData}
\item[\code{featureNames(object)},
\code{featureNames(object) <- value}:] Coordinate accessing and setting of
feature names (e.g, genes, probes) in \code{assayData}.
\item[\code{dims(object)}:] Access the common dimensions (\code{dim}) or
column numbers (\code{ncol}), or dimensions of all members
(\code{dims}) of \code{assayData}.

\item[\code{phenoData(object)},
\code{phenoData(object) <- value}:] Access and set
\code{phenoData}. Adding new columns to \code{phenoData} is often
more easily done with \code{eSetObject[["columnName"]] <- value}.
\item[\code{pData(object)}, \code{pData(object) <- value}:] Access and set
sample data information. Adding new columns to \code{pData} is often
more easily done with \code{eSetObject[["columnName"]] <- value}.
\item[\code{varMetadata(object)},
\code{varMetadata(eSet,value)}] Access and set metadata describing
variables reported in \code{pData}
\item[\code{varLabels(object)}, \code{varLabels(eSet,
             value)<-}:] Access and set variable labels in
\code{phenoData}.

\item[\code{featureData(object)},
\code{featureData(object) <- value}:] Access and set \code{featureData}.
\item[\code{fData(object)}, \code{fData(object) <- value}:] Access and set
feature data information.
\item[\code{fvarMetadata(object)},
\code{fvarMetadata(eSet,value)}] Access and set metadata describing
features reported in \code{fData}
\item[\code{fvarLabels(object)},
\code{fvarLabels(eSet, value)<-}:] Access and set variable labels in
\code{featureData}. 

\item[\code{assayData(object), assayData(object) <- value}:] \code{signature(object = "eSet", value = "AssayData")}: Access
and replace the \code{AssayData} slot of an
\code{eSet} instance. \code{assayData} returns a list or
environment; elements in \code{assayData} not accessible in other
ways (e.g., via \code{exprs} applied directly to the \code{eSet})
can most reliably be accessed with, e.g., \code{assayData(obj)[["se.exprs"]]}.
\item[\code{experimentData(object)},\code{experimentData(object) <- value}:] Access
and set details of experimental methods
\item[\code{description(object)},\code{description(object) <- value}:] Synonymous with experimentData.
\item[\code{notes(object)},\code{notes(object) <- value}:] \code{signature(object="eSet", value="list")} Retrieve and set unstructured notes associated with \code{eSet}.
\code{signature(object="eSet", value="character")} As with
value="list", but \emph{append} value to current list of notes.

\item[\code{pubMedIds(object)}, \code{pubMedIds(eSet,value)}] Access
and set PMIDs in \code{experimentData}.
\item[\code{abstract(object)}:] Access abstract in
\code{experimentData}.
\item[\code{annotation(object)},
\code{annotation(object) <- value}] Access and set annotation label
indicating package used in the experiment.
\item[\code{protocolData(object)},
\code{protocolData(object) <- value}] Access and set the protocol data.
\item[\code{preproc(object)},
\code{preproc(object) <- value}:] \code{signature(object="eSet",
         value="list")} Access and set \code{preprocessing} information
in the \code{\LinkA{MIAME-class}{MIAME.Rdash.class}} object associated with this
\code{eSet}.
\item[\code{combine(eSet,eSet)}:] Combine two \code{eSet}
objects. To be combined, eSets must have identical numbers of
\code{featureNames}, distinct \code{sampleNames}, and identical \code{annotation}.
\item[\code{storageMode(object)}, \code{storageMode(eSet,character)<-}:] Change storage mode
of \code{\LinkA{assayData}{assayData}}. Can be used to 'unlock' environments,
or to change between \code{list} and \code{environment} modes of
storing \code{assayData}.
}
Standard generic methods:
\describe{
\item[\code{initialize(object)}:] Object instantiation, can be called by
derived classes but not usually by the user.
\item[\code{validObject(object)}:] Validity-checking method,
ensuring (1) all assayData components have the same number of
features and samples; (2) the number and names of
\code{phenoData} rows match the number and names of
\code{assayData} columns
\item[\code{as(eSet, "ExpressionSet")}] Convert instance of class \code{"eSet"} to instance of \code{\LinkA{ExpressionSet-class}{ExpressionSet.Rdash.class}}, if possible.
\item[\code{as(eSet, "MultiSet")}] Convert instance of class \code{"eSet"} to instance of \code{\LinkA{MultiSet-class}{MultiSet.Rdash.class}}, if possible.
\item[\code{updateObject(object, ..., verbose=FALSE)}] Update instance to current version, if necessary. Usually called through class inheritance rather than directly by the user. See \code{\LinkA{updateObject}{updateObject}}
\item[\code{updateObjectTo(object, template, ..., verbose=FALSE)}] Update instance to current version by updating slots in \code{template}, if necessary. Usually call by class inheritance, rather than directly by the user. See \code{\LinkA{updateObjectTo}{updateObjectTo}}
\item[\code{isCurrent(object)}] Determine whether version of object is current. See \code{\LinkA{isCurrent}{isCurrent}}
\item[\code{isVersioned(object)}] Determine whether object contains a 'version' string describing its structure . See \code{\LinkA{isVersioned}{isVersioned}}
\item[\code{show(object)}] Informatively display object contents.
\item[\code{dim(object)}, \code{ncol}] Access the common
dimensions (\code{dim}) or column numbers (\code{ncol}), of all
memebers (\code{dims}) of \code{assayData}.
\item[\code{object[(index)}:] Conducts subsetting of matrices and
phenoData components 
\item[\code{object\$name}, \code{object\$name<-value}] Access and set \code{name} column in \code{phenoData}
\item[\code{object[[i, ...]]}, \code{object[[i, ...]]<-value}] Access and set column \code{i} (character or
numeric index) in \code{phenoData}. The ... argument can include
named variables (especially \code{labelDescription}) to be added
to varMetadata.
}
Additional functions:
\describe{
\item[assayDataElement(object, element)] Return matrix
\code{element} from \code{assayData} slot of \code{object}.
\item[assayDataElement(object, element) <- value)] Set element
\code{element} in \code{assayData} slot of \code{object} to matrix \code{value}
\item[assayDataElementReplace(object, element, value)] Set element
\code{element} in \code{assayData} slot of \code{object} to matrix \code{value}
\item[assayDataElementNames(object)] Return element names in
\code{assayData} slot of \code{object}
\item[\code{updateOldESet}] Update versions of \code{eSet}
constructued using \code{listOrEnv} as \code{assayData} slot
(before May, 2006).
}
\end{Section}
\begin{Author}\relax
Biocore team
\end{Author}
\begin{SeeAlso}\relax
Method use in \code{\LinkA{ExpressionSet-class}{ExpressionSet.Rdash.class}}.
Related  classes
\code{\LinkA{AssayData-class}{AssayData.Rdash.class}}, \code{\LinkA{AnnotatedDataFrame-class}{AnnotatedDataFrame.Rdash.class}}, \code{\LinkA{MIAME-class}{MIAME.Rdash.class}}.
Derived classes
\code{\LinkA{ExpressionSet-class}{ExpressionSet.Rdash.class}}, \code{\LinkA{SnpSet-class}{SnpSet.Rdash.class}}.
To update objects from previous class versions, see \code{\LinkA{updateOldESet}{updateOldESet}}.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}

# update previous eSet-like class oldESet to existing derived class
## Not run: updateOldESet(oldESet, "ExpressionSet")

# create a new, ad hoc, class, for personal use
# all methods outlined above are available automatically
setClass("MySet", contains="eSet")
new("MySet")

# Create a more robust class, with initialization and validation methods
# to ensure assayData contains specific matricies
setClass("TwoColorSet", contains="eSet")

setMethod("initialize", "TwoColorSet",
          function(.Object,
                   phenoData = new("AnnotatedDataFrame"),
                   experimentData = new("MIAME"),
                   annotation = character(),
                   R = new("matrix"),
                   G = new("matrix"),
                   Rb = new("matrix"),
                   Gb = new("matrix"),
                   ... ) {
            callNextMethod(.Object,
                           phenoData = phenoData,
                           experimentData = experimentData,
                           annotation = annotation,
                           R=R, G=G, Rb=Rb, Gb=Gb,
                           ...)
          })

setValidity("TwoColorSet", function(object) {
  assayDataValidMembers(assayData(object), c("R", "G", "Rb", "Gb"))
})

new("TwoColorSet")

# eSet objects cannot be instantiated directly, only derived objects
try(new("eSet"))

removeClass("MySet")
removeClass("TwoColorSet")
removeMethod("initialize", "TwoColorSet")
\end{ExampleCode}
\end{Examples}

