esApply: An apply-like function for ExpressionSet and related...

esApplyR Documentation

An apply-like function for ExpressionSet and related structures.

Description

esApply is a wrapper to apply for use with ExpressionSets. The application of a function to rows of an expression array usually involves variables in pData. esApply uses a special evaluation paradigm to make this easy. The function FUN may reference any data in pData by name.

Usage

esApply(X, MARGIN, FUN, ...)

Arguments

X

An instance of class ExpressionSet.

MARGIN

The margin to apply to, either 1 for rows (samples) or 2 for columns (features).

FUN

Any function

...

Additional parameters for FUN.

Details

The pData from X is installed in an environment. This environment is installed as the environment of FUN. This will then provide bindings for any symbols in FUN that are the same as the names of the pData of X. If FUN has an environment already it is retained but placed after the newly created environment. Some variable shadowing could occur under these circumstances.

Value

The result of with(pData(x), apply(exprs(X), MARGIN, FUN, ...)).

Author(s)

V.J. Carey <stvjc@channing.harvard.edu>, R. Gentleman

See Also

apply, ExpressionSet

Examples

data(sample.ExpressionSet)
## sum columns of exprs
res <- esApply(sample.ExpressionSet, 1, sum)

## t-test, spliting samples by 'sex'
f <- function(x) {
    xx <- split(x, sex)
    t.test(xx[[1]], xx[[2]])$p.value
}
res <- esApply(sample.ExpressionSet, 1, f)

## same, but using a variable passed in the function call

f <- function(x, s) {
    xx <- split(x, s)
    mean(xx[[1]]) - mean(xx[[2]])
}
sex <- sample.ExpressionSet[["sex"]]
res <- esApply(sample.ExpressionSet, 1, f, s = sex)

# obtain the p-value of the t-test for sex difference
mytt.demo <- function(y) {
 ys <- split(y, sex)
 t.test(ys[[1]], ys[[2]])$p.value
}
sexPValue <- esApply(sample.ExpressionSet, 1, mytt.demo)

# obtain the p-value of the slope associated with score, adjusting for sex
# (if we were concerned with sign we could save the z statistic instead at coef[3,3]
myreg.demo <- function(y) {
   summary(lm(y ~ sex + score))$coef[3,4]
}
scorePValue <- esApply(sample.ExpressionSet, 1, myreg.demo)

# a resampling method
resamp <- function(ESET) {
 ntiss <- ncol(exprs(ESET))
 newind <- sample(1:ntiss, size = ntiss, replace = TRUE)
 ESET[newind,]
}

# a filter
q3g100filt <- function(eset) {
 apply(exprs(eset), 1, function(x) quantile(x,.75) > 100)
}

# filter after resampling and then apply
set.seed(123)
rest <- esApply({bool <- q3g100filt(resamp(sample.ExpressionSet)); sample.ExpressionSet[bool,]},
                1, mytt.demo)

Bioconductor/Biobase documentation built on Nov. 2, 2024, 6:31 a.m.