Some languages that recognized early design mistakes introduced a strict mode, which applies to a local context, and enforces a safer, more consistent API. This is a pragmatic solution, as it does not require any changes to existing code, but still allows writing better code in the future.
Implementing a context restricted strict mode is probably not trivial, considering the flexibility of the language, but maybe it is worth some thinking. Gábor On Tue, Sep 18, 2018 at 2:00 PM peter dalgaard <pda...@gmail.com> wrote: > > Yes, both are rooted in age-old design infelicities (in which, basically, > interactive expedience has taken precedence over consistency and generality). > > Unfortunately, they are quite difficult to rectify, because there are bound > to be countless uses of, say, diag(5) as a 5x5 identity matrix which would > break if it suddenly meant the 1x1 matrix(5) instead. > > We'd need a very carefully orchestrated warn-deprecate-defunct-newBehaviour > sequence, with a time scale of years, most likely. It is, in principle, > doable (I think), but we don't really have the mechanisms to follow through > on it. Almost all developers have main job responsibilities, and it is very > easy to get sidetracked at the wrong moment, so most changes get done on a > now-or-never basis. > > I have toyed with the idea of setting up for version-dependent code where > code sections could be coded up front and then activated when the relevant > version is reached. Then I got swamped again... > > -pd > > > On 17 Sep 2018, at 20:08 , Barry Rowlingson <b.rowling...@lancaster.ac.uk> > > wrote: > > > > On Mon, Sep 17, 2018 at 5:22 PM, Gábor Csárdi <csardi.ga...@gmail.com> > > wrote: > > > >> I would say it is a mis-feature. If the 'x' argument of diag() is a > >> vector of length 1, then it creates an identity matrix of that size, > >> instead of creating a 1x1 matrix with the given value: > >> > >> ❯ diag(3) > >> [,1] [,2] [,3] > >> [1,] 1 0 0 > >> [2,] 0 1 0 > >> [3,] 0 0 1 > >> > >> Of course this makes it cumbersome to use diag() in a package, when > >> you are not sure if the input vector is longer than 1. This seems to > >> be a good workaround: > >> > >> ❯ diag(-1, nrow = 1) > >> [,1] > >> [1,] -1 > >> > >> Or, in general if you have vector v: > >> > >> ❯ v <- -1 > >> ❯ diag(v, nrow = length(v)) > >> [,1] > >> [1,] -1 > >>> > >> > > > > Anyone else getting deja-vu with the `sample` function? > > > >> sample(5:3) > > [1] 3 5 4 > > > > ok... > > > >> sample(5:4) > > [1] 4 5 > > > > fine... > > > >> sample(5:5) > > [1] 3 1 5 2 4 > > > > uh oh. Documented, of course. > > > > B > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > > -- > Peter Dalgaard, Professor, > Center for Statistics, Copenhagen Business School > Solbjerg Plads 3, 2000 Frederiksberg, Denmark > Phone: (+45)38153501 > Office: A 4.23 > Email: pd....@cbs.dk Priv: pda...@gmail.com > > > > > > > > > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel