[Rd] simplify2array edge case

Martin Maechler maechler at stat.math.ethz.ch
Fri Oct 19 11:09:22 CEST 2012


>>>>> William Dunlap <wdunlap at tibco.com>
>>>>>     on Thu, 11 Oct 2012 18:59:52 +0000 writes:

    > Should simplify2array(higher=TRUE) treat 1 by 1 matrices differently than others?
    > I expected a 3-dimensional array from all of the following 3 examples, not just the last 2.

    >> str(simplify2array(list(array(11,c(1,1)), array(21,c(1,1))), higher=TRUE))
    > num [1:2] 11 21
    >> str(simplify2array(list(array(11:13,c(3,1)), array(21:23,c(3,1))), higher=TRUE))
    > int [1:3, 1, 1:2] 11 12 13 21 22 23
    >> str(simplify2array(list(array(11:13,c(1,3)), array(21:23,c(1,3))), higher=TRUE))
    > int [1, 1:3, 1:2] 11 12 13 21 22 23

I wrote simplify2array() in order to modularize sapply()
and have mapply() and sapply() behave identically
and because its utility seemed useful in at least on other case.
In the mean time it is also used in the parallel package's
*apply() functions.

The distinction of  1 x 1  vs  n x n  for n >= 2
i.e.,

       if (common.len == 1L) 
            unlist(answer, recursive = FALSE)
        else if (common.len > 1L) 
            array(unlist(answer, recursive = FALSE), dim = c(common.len, 
	          .......
		  ....... )

had really been part of sapply() at the time and hence needed to
go into simplify2array() in order to keep sapply() completely
back compatible.

Bill, have you looked into optional different behavior?

Martin Maechler, ETH Zurich

    > Bill Dunlap
    > Spotfire, TIBCO Software
    > wdunlap tibco.com



More information about the R-devel mailing list