Regarding Martin Maechler's proposal: Arithmetic between length-1 arrays and longer non-arrays had silently dropped the array attributes and recycled. This now gives a warning and will signal an error in the future, as it has always for logic and comparison operations
For example, matrix(1,1,1) + (1:2) would give a warning/error. I think this might be a mistake. The potential benefits of this would be detection of some programming errors, and increased consistency. The downsides are breaking existing working programs, and decreased consistency. Regarding consistency, the overall R philosophy is that attaching an attribute to a vector doesn't change what you can do with it, or what the result is, except that the result (often) gets the attributes carried forward. By this logic, adding a 'dim' attribute shouldn't stop you from doing arithmetic (or comparisons) that you otherwise could. But maybe 'dim' attributes are special? Well, they are in some circumstances, and have to be when they are intended to change the behaviour, such as when a matrix is used as an index with [. But in many cases at present, 'dim' attributes DON'T stop you from treating the object as a plain vector - for example, one is allowed to do matrix(1:4,2,2)[3], and a<-numeric(10); a[2:5]<-matrix(1,2,2). So it may make more sense to move towards consistency in the permissive direction, rather than the restrictive direction. That would mean allowing matrix(1,1,1)<(1:2), and maybe also things like matrix(1,2,2)+(1:8). Obviously, a change that removes error conditions is much less likely to produce backwards-compatibility problems than a change that gives errors for previously-allowed operations. And I think there would be some significant problems. In addition to the 10-20+ packages that Martin expects to break, there could be quite a bit of user code that would no longer work - scripts for analysing data sets that used to work, but now don't with the latest version. There are reasons to expect such problems. Some operations such as vector dot products using %*% produce results that are always scalar, but are formed as 1x1 matrices. One can anticipate that many people have not been getting rid of the 'dim' attribute in such cases, when doing so hasn't been necessary in the past. Regarding the 0-length vector issue, I agree with other posters that after a<-numeric(0), is has to be allowable to write a<1. To not allow this would be highly destructive of code reliability. And for similar reason, after a<-c(), a<1 needs to be allowed, which means NULL<1 should be allowed (giving logical(0)), since c() is NULL. Radford Neal ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel