esApply {Biobase} | R Documentation

## An apply-like function for ExpressionSet and related structures.

### Description

`esApply` is a wrapper to `apply` for use with `ExpressionSet`s and (deprecated) `exprSet`s. 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` or (deprecated) `exprSet`.
`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)

    ## Earlier examples, with (deprecated) sample.exprSet.1

    data(sample.exprSet.1)

    # we know that eset has covariates in the pData called "cov1" and "cov2"
    # here cov1 is an unbound value, it will be resolved by using the pData
    # here are two functions conforming to the esApply protocol

    mytt.demo <- function(y) {
     ys <- split( y, cov1 )
     t.test( ys[[1]], ys[[2]] )$p.value
     }

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

    newt <- esApply( sample.exprSet.1, 1, mytt.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.exprSet.1)); sample.exprSet.1[bool,] }, 1,
    mytt.demo )

[Package Biobase version 1.16.3 Index]