From maechler at stat.math.ethz.ch  Fri Oct 19 11:09:22 2012
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Fri, 19 Oct 2012 11:09:22 +0200
Subject: [Rd] simplify2array edge case
In-Reply-To: <E66794E69CFDE04D9A70842786030B933713B7@PA-MBX04.na.tibco.com>
References: <E66794E69CFDE04D9A70842786030B933713B7@PA-MBX04.na.tibco.com>
Message-ID: <20609.6338.465537.274685@stat.math.ethz.ch>

>>>>> 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



[Rd] simplify2array edge case
Martin Maechler