Semantics of sequences in R
On Mon, 23 Feb 2009 08:52:05 +0100
Wacek Kusnierczyk <Waclaw.Marcin.Kusnierczyk at idi.ntnu.no> wrote:
Berwin A Turlach wrote:
G'day Stavros,
<snip>
In many cases, the orthogonal design is pretty straightforward.
And in the cases where the operation is currently an error (e.g.
sort(list(...))), I'd hope that wouldn't break existing code. [...]
This could actually be an example that would break a lot of existing code. sort is a generic function, and for sort(list(...)) to work, it would have to dispatch to a function called sort.list; and as Patrick Burns' "The R Inferno" points out, such a function exists already and it is not for sorting list.
and you mean that sort.list not being applicable to lists is a) good design, and b) something that by noe means should be fixed, right?
I neither said nor meant this and I do not see how what I said could be interpreted in such a way. I was just commenting to Stavros that the example he picked, hoping that it would not break existing code, was actually a bad one which potentially will break a lot (?) of existing code. Also, until reading Patrick Burns' "The R Inferno" I was not aware of sort.list. That function had not registered with me since I hardly used it. And I also have no need of calling sort() on lists. For em a lists is a flexible enough data structure such that defining a sort() command for them makes no sense; it could only work in very specific circumstances.
In fact, currently you get: R> cc <- list(a=runif(4), b=rnorm(6)) R> sort(cc) Error in sort.list(cc) : 'x' must be atomic for 'sort.list' Have you called 'sort' on a list?
one of the most funny error messages you get in r. note also that, following rolf turner's lists and vectors unproven theorem, a vector can be considered a list
I do not remember the exact context of Rolf's comments, but I believe he was talking in a more general sense and not in technical terms. I find it perfectly valid, even when talking about R, to say something like "vectors are stored as a list of numbers in consecutive memory locations in memory". Clearly, in a phrase like this, we are not talking about "vectors" and "list" as defined by the "R Language Definition" or "R Internals", or what functions like is.vector(), is.list() &c return for various R objects. BTW, as I mentioned once before, you might want to consider to lose these chips on your shoulders.
-- hence sort.list should raise the error on any vector input, no?
You will have to take that up with the designers of sort.list.
Thus, to make sort(list()) work, you would have to rename the existing sort.list and then change every call to that function to the new name. I guess this might break quite a few packages on CRAN.
scary! it's much preferred to confuse new users.
I usually learn a lot when I get confused about some issues/concept. Confusion forces one to sit down, think deeply and, thus, gain some understanding. So I am not so much concerned with new users being confused. It is, of course, a problem if the new user never comes out of his or her confusion. Cheers, Berwin