[R] Using apply with more than one matrix

Richard M. Heiberger rmh at temple.edu
Thu May 1 04:57:35 CEST 2014


Try
?mapply

Description:

     'mapply' is a multivariate version of 'sapply'.  'mapply' applies
     'FUN' to the first elements of each ...  argument, the second
     elements, the third elements, and so on.  Arguments are recycled
     if necessary.

Rich

On Wed, Apr 30, 2014 at 9:03 PM, Waichler, Scott R
<Scott.Waichler at pnnl.gov> wrote:
> Here is a working example with no random parts.  Thanks for your patience and if I'm still off the mark with my presentation I'll drop the matter.
>
> v <- c(NA, 1.5, NA, NA,
>        NA, 1.1, 0.5, NA,
>        NA, 1.3, 0.4, 0.9)
> a1 <- array(v, dim=c(2,2,3))
> m1 <- matrix(c(NA, 1.5, 2.1, NA), ncol=2, byrow=T)
> m2 <- matrix(c(1.56, 1.64, 1.16, 2.92), ncol=2)
> condition1 <- !is.na(m1)& m1 > m2
>
> ans <- matrix(NA, ncol=2, nrow=2) # initialize
> for(i in 1:2) {
>   for(j in 1:2) {
>     ind.not.na <- which(!is.na(a1[i,j,]))
>     if(condition1[i,j] && length(ind.not.na) > 0) ans[i,j] <- a1[i,j,ind.not.na[1]] + m2[i,j]
>   }
> }
> ans
>      [,1] [,2]
> [1,]   NA 1.66
> [2,] 3.14   NA
>
> Let me try asking again in words.  If I have multiple matrices or slices of 3d arrays that are the same dimension, is there a way to pass them all to apply, and have apply take care of looping through i,j?  I understand that apply has just one input object x.  I want to work on more than one array object at once using a custom function that has this characteristic:  in order to compute the answer at i,j I need a result from higher order array at the same i,j.  This is what I tried to demonstrate in my example above.
>
> Thanks,
> Scott
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list