esApply               package:Biobase               R Documentation

_A_n _a_p_p_l_y-_l_i_k_e _f_u_n_c_t_i_o_n _f_o_r _E_x_p_r_e_s_s_i_o_n_S_e_t _a_n_d _r_e_l_a_t_e_d _s_t_r_u_c_t_u_r_e_s.

_D_e_s_c_r_i_p_t_i_o_n:

     '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.

_U_s_a_g_e:

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

_A_r_g_u_m_e_n_t_s:

       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'.

_D_e_t_a_i_l_s:

     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.

_V_a_l_u_e:

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

_A_u_t_h_o_r(_s):

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

_S_e_e _A_l_s_o:

     'apply', 'ExpressionSet'

_E_x_a_m_p_l_e_s:

     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 )

