amap {garray} | R Documentation |
Mapping matching dimension of arrays with a function
Description
Generalized and smart mapply()/Map()/outer()/sweep() for data mapping. Matching is checked automatically.
Usage
amap(FUN, ..., MoreArgs = NULL, SIMPLIFY = TRUE, VECTORIZED = NA)
## S3 method for class 'garray'
Ops(e1, e2)
Arguments
FUN |
Known vectorized function is recognized if passed in
as character. Other functions will be vectorized by |
... |
Arrays with margins (names of dimnames) and maybe with sdim.
Orders of their margins can be different, but the extent along a
margin is matched. Unmatched margins are broadcasting like outer().
Scalar (length 1 vector) do not contribute margins and
not broadcast here (they will broadcast by |
MoreArgs |
a list of other arguments to 'FUN', no matching of margins. |
SIMPLIFY |
logical, attempt to reduce the result to exclude recursive structure (no list hierachy but plain generalized array). |
VECTORIZED |
Whether FUN is vectorized will affect the behaviours.
Some combination of FUN and VECTORIZED is not simply slowing down,
but produces meaningless results or even stop (e.g., cumsum).
TRUE - call |
e1 , e2 |
Generalized arrays, being operands. |
Value
The dimensions is deduced from inputs.
Examples
a <- garray(1:24, c(4,6,2), dimnames=list(X=1:4, Y=letters[1:6], Z=NULL),
sdim=list(XX=c(x1=3,x2=1), YY=c(y1=1,y2=2)))
b <- garray(1:6/10,6,dimnames=list(Y=letters[1:6]))
c <- garray(1:4/100,c(X=4))
d <- garray(1:4/1000,c(Y=4))
e <- garray(1:2/1000,c(X=2))
f <- garray(0,c(Z=2))
g <- garray(0,c(ZZ=2))
m1 <- amap(psummary,c,a,b, 0.0001, VECTORIZED=FALSE)
m2 <- amap(sum, c,a,b, 0.0001, VECTORIZED=FALSE)
m3 <- c+a+b+ 0.0001
n1 <- amap(sum, c,a,b,d, 0.0001, VECTORIZED=FALSE)
n2 <- amap(sum, c,a,b,e, 0.0001, VECTORIZED=FALSE)
n3 <- amap(sum, c,a,b,e,f, 0.0001, VECTORIZED=FALSE)
p1 <- amap(sum, c,a,b,e,f,g,0.0001, VECTORIZED=FALSE)
q1 <- amap(sum, c,a,b,e,f,g,0.0001, SIMPLIFY=FALSE, VECTORIZED=FALSE)
q2 <- amap(c, c,a,b,e,f,g,0.0001, SIMPLIFY=FALSE, VECTORIZED=FALSE)
q3 <- amap(list,c,a,b,e,f,g,0.0001, SIMPLIFY=FALSE, VECTORIZED=FALSE)
m1==m2
m2==m3
m2==aperm(m3, 3:1)