########################################################################/**
# @RdocFunction findCdf
#
# @title "Search for CDF files in multiple directories"
#
# \description{
# @get "title".
# }
#
# @synopsis
#
# \arguments{
# \item{chipType}{A @character string of the chip type to search for.}
# \item{paths}{A @character @vector of paths to be searched.
# The current directory is always searched at the beginning.
# If @NULL, default paths are searched. For more details, see below.}
# \item{recursive}{If @TRUE, directories are searched recursively.}
# \item{pattern}{A regular expression file name pattern to match.}
# \item{...}{Additional arguments passed to @see "findFiles".}
# }
#
# \value{
# Returns a @vector of the full pathnames of the files found.
# }
#
# \details{
# Note, the current directory is always searched first, but never
# recursively (unless it is added to the search path explicitly).
# This provides an easy way to override other files in the search path.
#
# If \code{paths} is @NULL, then a set of default paths are searched.
# The default search path constitutes:
# \enumerate{
# \item \code{getOption("AFFX_CDF_PATH")}
# \item \code{Sys.getenv("AFFX_CDF_PATH")}
# }
#
# One of the easiest ways to set system variables for \R is to
# set them in an \code{.Renviron} file, e.g.
# \preformatted{
# # affxparser: Set default CDF path
# AFFX_CDF_PATH=${AFFX_CDF_PATH};M:/Affymetrix_2004-100k_trios/cdf
# AFFX_CDF_PATH=${AFFX_CDF_PATH};M:/Affymetrix_2005-500k_data/cdf
# }
# See @see "base::Startup" for more details.
# }
#
# @examples "../incl/findCdf.Rex"
#
# \seealso{
# This method is used internally by @see "readCelUnits" if the CDF
# file is not specified.
# }
#
# @author "HB"
#
# @keyword file
# @keyword IO
#**/#######################################################################
findCdf <- function(chipType=NULL, paths=NULL, recursive=TRUE, pattern="[.](c|C)(d|D)(f|F)$", ...) {
settings <- getOption("affxparser.settings");
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Customized search method?
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
findFcn <- settings$methods$findCdf;
if (!is.null(findFcn)) {
if (!is.list(findFcn))
findFcn <- list(findFcn);
for (fcn in findFcn) {
# Pass arguments as is
pathnames <- fcn(chipType=chipType, paths=paths,
recursive=recursive, pattern=pattern, ...);
if (!is.null(pathnames))
return(pathnames);
}
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Setup search path and pattern
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
if (is.null(paths)) {
paths <- c(getOption("AFFX_CDF_PATH"), Sys.getenv("AFFX_CDF_PATH"));
}
paths <- unlist(strsplit(paths, split=";"), use.names=FALSE);
if (!is.null(chipType)) {
if (regexpr("[.](c|C)(d|D)(f|F)$", chipType) !=-1)
warning("Argument 'chipType' of findCdf() has suffix '.cdf':", chipType);
pattern <- paste(chipType, pattern, sep="");
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Search
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 1. First, search the current directory
pathnames <- findFiles(pattern=pattern, paths=".", recursive=FALSE, ...);
if (!is.null(pathnames))
return(pathnames);
# 2. Then, scan all of the search path
findFiles(pattern=pattern, paths=paths, recursive=recursive, ...);
}
############################################################################
# HISTORY:
# 2007-08-27
# o The current path is never scanned recursively (unless explicitly
# specified in the search path). This is to avoid endless scans in case
# the search path has not been set.
# o Added argument 'recursive=TRUE' to findCdf().
# 2007-02-12 [moved to affxparser 2007-03-28]
# o Added option 'affxparser.settings' (for now private), allowing for an
# alternative search function to be set it element methods$findCdf.
# This is utilized by the aroma.affymetrix package to look for CDF
# using a more formalized hierarchical directory structure.
# 2006-09-21
# o findCdf() now gives a warning *.cdf extension is given, but tries not
# to resolve it.
# 2006-09-15
# o The current directory "." was not the first directory scanned as
# documented. Also added cdf/ and data/cdf to the beginning and not
# at the end of the search path.
# 2006-03-14
# o Now making use of findFiles(), which makes this function much shorter.
# o Migrated the code to work without R.utils too.
# o Added system environment variable and option to the default path.
# 2006-02-22
# o Created.
############################################################################
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.