Skip to content

Subsetted 1-D arrays (PR#4110)

3 messages · David Brahm, Peter Dalgaard, Brian Ripley

#
In R-patched_2003-10-20, subsetted 1-D arrays no longer get converted to
vectors.  The NEWS file documents this change, as an indirect result of bug
report 4110.  I just wanted to mention this can break code in some rather
obscure ways, such as this toy example:

  R> x <- sort(tapply(1:8, rep(1:4,2), sum))  # Was vector, now is 1D array
  R> y <- matrix(1:4, 1,4)                    # 1x4 matrix
  R> x + y                                    # Used to return a 1x4 matrix
     Error in x + y : non-conformable arrays

I agree with the change, but I would beware that some puzzled users may not
associate new "tapply problems" with this news item.

Also, *should* you be able to add a (4) array to a (1,4) array?
#
David Brahm  <brahm@alum.mit.edu> writes:
Without the sort() that was an error in 1.8.0 too. However, we've
found other surprises like 

  prop.trend.test(tt[1,], margin.table(tt,2))

which internally will pass a 1D array as weights to lm.
Yep. And I tend to agree that the original problem had to be fixed.
...or to a (4,1) array? Currently the answer is clearly neither: if
both terms have dimensions, the dimensions must match. It is kind of
tempting though.
#
On Tue, 21 Oct 2003, David Brahm wrote:

            
We are aware of a couple of such problems, but they are code that should 
not have worked before.  Unfortunately, in S tapply gives a vector and not 
a 1D array here ....
No.  You cannot in S.