Learn R Programming

Ecfun (version 0.1-4)

trimImage: 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 TRUE, NAs will be ignored in determining the max absolute value for the row. If a row or column is all NA, it will be treated as all 0 in deciding whether to trim. If FALSE, any row or column containing an NA will be retaine
returnIndices2Keep
if TRUE, return a list with 2 integer vectors giving row and column indices to use in selecting the desired subset of x. This allows an array y to be trimmed to match x. If FALSE, return the desired
...
Optional arguments; not currently used.

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.

Details

1. Check arguments: 2

See Also

trim trims raster images, similar to trimImage. trim 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

Run this code
##
## 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]))
stopifnot(
all.equal(tst1t, tst1.)
)

##
## 2.  returnIndices2Keep
##
tst2i <- trimImage(tst1, returnIndices2Keep=TRUE)
tst2a <- trimImage(tst1, returnIndices2Keep=tst2i)

tst2i. <- list(index1=2, index2=2)


# check
stopifnot(
all.equal(tst2i, tst2i.)
)
stopifnot(
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
stopifnot(
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
stopifnot(
all.equal(tst4t, tst1[2, 2, drop=FALSE])
)

stopifnot(
all.equal(tst4o, tst4)
)

##
## 5.  trim all
##
tst4a <- trimImage(tst1, 1)

tst4a. <- matrix(0,0,0,
     dimnames=list(NULL, NULL))

stopifnot(
all.equal(tst4a, tst4a.)
)

Run the code above in your browser using DataLab