subsums {magic} | R Documentation |
Returns the sums of submatrices of an array; multidimensional moving window averaging
subsums(a,p,FUN="sum",wrap=TRUE, pad=0)
a |
Array to be analysed |
p |
Argument specifying the subarrays to be summed. If a vector
of length greater than one,
it is assumed to be of length d=length(dim(a)) , and is
interpreted to be the dimensions of the subarrays, with
the size of the window's n-th dimension being
a[n] . If the length of p is one, recycling is used.
If not a vector, is assumed to be a matrix with d columns, each
row representing the coordinates of the elements to be summed. See
examples.
|
FUN |
Function to be applied over the elements of the moving
window. Default value of sum gives the sum as used in
is.2x2.correct() ; other choices might be mean ,
prod , or max .
If sum="" , return the array of dimension
c(dim(a),prod(p)) where each hyperplane is a shifted version
of a . |
wrap |
Boolean, with default value of TRUE meaning to view
array a as a n-dimensional torus. Thus, if
x=subsums(a,p,wrap=TRUE) , and if dim(a)=c(a_1,...,a_d)
then x[a_1,...,a_d] is the sum of all corner elements of
a .
If FALSE , do not wrap a and return an array of
dimension dim(a)+p-1 . |
pad |
If wrap is TRUE , pad is
the value used to pad the array with. Use a “neutral” value here;
for example, if FUN=sum , then use 0; if max , use
-Inf. |
The offset is specified so that allsums(a,v)[1,1,...,1]=
sum(a[1:v[1],1:v[2],...,1:v[n]])
, where n=length(dim(a))
.
Function subsums()
is used in is.2x2.correct()
and
is.diagonally.correct()
.
Robin K. S. Hankin
data(Ollerenshaw) subsums(Ollerenshaw,c(2,2)) subsums(Ollerenshaw[,1:10],c(2,2)) subsums(Ollerenshaw, matrix(c(0,6),2,2)) # effectively, is.bree.correct() # multidimensional example. a <- array(1,c(3,4,2)) subsums(a,2) # note that p=2 is equivalent to p=c(2,2,2); # all elements should be identical subsums(a,2,wrap=FALSE) #note "middle" elements > "outer" elements #Example of nondefault function: x <- matrix(1:42,6,7) subsums(x,2,FUN="max",pad=Inf,wrap=TRUE) subsums(x,2,FUN="max",pad=Inf,wrap=FALSE)