trimImage {Ecfun} | R Documentation |
Trim zero rows or columns from an object of
class Image
.
Description
Identify rows or columns of a matrix or 3-dimensional array that are all 0 and remove them.
Usage
trimImage(x, max2trim=.Machine$double.eps,
na.rm=TRUE, returnIndices2Keep=FALSE,
...)
Arguments
x |
a numeric matrix or 3-dimensional array or an object with subscripting defined so it acts like such. |
max2trim |
a single number indicating the max absolute numeric value to trim. |
na.rm |
logical: If If |
returnIndices2Keep |
if If If this is a list with two two
integer vectors, use them to trim
|
... |
Optional arguments; not currently used. |
Details
1. Check arguments: 2 <=
length(dim(x))
<= 3?
is.logical(na.rm)
?
returnIndices2Keep
= logical
or list of 2 integer vectors, all
the same sign, not exceeding
dim(x)
?
2. if(is.list(returnIndices2Keep))
check that returnIndices2Keep
is a
list with 2 integer vectors, all the same
sign, not exceeding dim(x)
.
If yes, return x
appropriately
subsetted.
3. if(!is.logical(returnIndices2Keep))
throw an error message.
4. Compute indices2Keep
.
5. If(returnIndices2Keep)
return
(indices2Keep
) else return x
appropriately subsetted.
Value
if(returnIndices2Keep==TRUE)
return
a list with 2 integer vectors to use as
subscripts in trimming objects like
x
.
Otherwise, return an object like x
appropriately trimmed.
Author(s)
Spencer Graves
See Also
trim
trims raster
images, similar to trimImage
.
trimws
trims leading and
trailing spaces from character strings
and factors. Similar trim
functions exist in other packages but
without obvious, explicit consideration
of factors
.
Examples
##
## 1. trim a simple matrix
##
tst1 <- matrix(.Machine$double.eps, 3, 3,
dimnames=list(letters[1:3], LETTERS[1:3]))
tst1[2,2] <- 1
tst1t <- trimImage(tst1)
# check
tst1. <- matrix(1, 1, 1,
dimnames=list(letters[2], LETTERS[2]))
all.equal(tst1t, tst1.)
##
## 2. returnIndices2Keep
##
tst2i <- trimImage(tst1, returnIndices2Keep=TRUE)
tst2a <- trimImage(tst1, returnIndices2Keep=tst2i)
tst2i. <- list(index1=2, index2=2)
# check
all.equal(tst2i, tst2i.)
all.equal(tst2a, tst1.)
##
## 3. trim 0's only
##
tst3 <- array(0, dim=3:5)
tst3[2, 2:3, ] <- 0.5*.Machine$double.eps
tst3[3,,] <- 1
tst3t <- trimImage(tst3, 0)
# check
tst3t. <- tst3[2:3,, ]
# check
all.equal(tst3t, tst3t.)
##
## 4. trim NAs
##
tst4 <- tst1
tst4[1,1] <- NA
tst4[3,] <- NA
tst4t <- trimImage(tst4)
# tst4o == tst4
tst4o <- trimImage(tst4, na.rm=FALSE)
# check
all.equal(tst4t, tst1[2, 2, drop=FALSE])
all.equal(tst4o, tst4)
##
## 5. trim all
##
tst4a <- trimImage(tst1, 1)
tst4a. <- matrix(0,0,0,
dimnames=list(NULL, NULL))
all.equal(tst4a, tst4a.)