From jpnolan at american.edu  Thu Dec  8 21:09:13 2016
From: jpnolan at american.edu (John P. Nolan)
Date: Thu, 8 Dec 2016 20:09:13 +0000
Subject: [Rd] wish list:  generalized apply
Message-ID: <DM2PR0601MB8110B86F5689F2B1AF7CE0FC6840@DM2PR0601MB811.namprd06.prod.outlook.com>

Dear All,

I regularly want to "apply" some function to an array in a way that the arguments to the user function depend on the index on which the apply is working.  A simple example is:

A <- array( runif(160), dim=c(5,4,8) )
x <- matrix( runif(32), nrow=4, ncol=8 ) 
b <- runif(8)
f1 <- function( A, x, b ) { sum( A %*% x ) + b } 
result <- rep(0.0,8) 
for (i in 1:8) {
  result[i] <- f1( A[,,i], x[,i] , b[i] )
}

This works, but is slow.  I'd like to be able to do something like:
    generalized.apply( A, MARGIN=3, FUN=f1, list(x=x,MARGIN=2), list(b=b,MARGIN=1) ), where the lists tell generalized.apply to pass x[,i] and b[i] to FUN in addition to A[,,i].  

Does such a generalized.apply already exist somewhere?  While I can write a C function to do a particular case, it would be nice if there was a fast, general way to do this.  

John

............................................................................................

John P. Nolan
Math/Stat Dept., American University
Gray Hall, 4400 Massachusetts Ave, NW
Washington, DC 20016-8050
Phone: 202-885-3140
E-mail:  jpnolan at american.edu
Web:   http://fs2.american.edu/jpnolan/www/



[Rd] wish list: generalized apply
John P. Nolan