###########################################################################/**
# @set "class=logical"
# @RdocMethod whichVector
# @alias whichVector.matrix
#
# @title "Identifies TRUE elements in a logical vector"
#
# \description{
# @get "title".
#
# \emph{NOTE: @see "base::which" should be used instead of this method}
## unless you are running R (< 2.11.0), for which this method is faster
# than @see "base::which" for @logical @vectors, especially when there
# are no missing values.
# }
#
# @synopsis
#
# \arguments{
# \item{x}{A @logical @vector of length N.}
# \item{na.rm}{If @TRUE, missing values are treated as @FALSE,
# otherwise they are returned as @NA.}
# \item{use.names}{If @TRUE, the names attribute is preserved,
# otherwise it is not return.}
# \item{...}{Not used.}
# }
#
# \value{
# Returns an @integer @vector of length less or equal to N.
# }
#
# \section{Benchmarking}{
# In R v2.11.0 @see "base::which" was made approx. 10 times
# faster via a native implementation. Because of this, this
# method is of little use and approximately 3 times slower.
# However, for earlier version of R, this method is still
# significantly faster. For example,
# simple comparison on R v2.7.1 on Windows XP, show that
# this implementation can be more than twice as fast as
# @see "base::which", especially when there are no missing
# value (and \code{na.rm=FALSE}) is used.
# }
#
# \examples{\dontrun{
# @include "../incl/whichVector.Rex"
# }}
#
# @author
#
# \seealso{
# @see "base::which"
# }
#
# @keyword programming
# @keyword internal
#*/###########################################################################
setMethodS3("whichVector", "logical", function(x, na.rm=TRUE, use.names=TRUE, ...) {
if (!is.vector(x)) {
stop("Argument 'x' is not a vector: ", class(x)[1])
}
idxs <- seq_along(x)
# Identify TRUE and NA elements
idxs <- idxs[x]
# Remove missing values?
if (na.rm) {
idxs <- idxs[!is.na(idxs)]
}
# Use names
if (use.names) {
names(idxs) <- names(x)[idxs]
}
idxs
}, private=TRUE) # whichVector()
setMethodS3("whichVector", "matrix", function(x, ...) {
x <- as.vector(x)
whichVector(x, ...)
}, private=TRUE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.