On Fri, 12 Dec 2008, Duncan Murdoch wrote:

On 11/12/2008 9:45 PM, Mike Rowe wrote:
Greetings!

I come to R by way of Matlab.  One feature in Matlab I miss is its
"end" keyword.  When you put "end" inside an indexing expression, it
is interpreted as the length of the variable along the dimension being
indexed.  For example, if the same feature were implemented in R:

my.vector[5:end]

would be equivalent to:

my.vector[5:length(my.vector)]

And if my.vector is of length less than 5?

Also consider

my.vector[-(1:4)]

or:

this.matrix[3:end,end]

would be equivalent to:

this.matrix[3:nrow(this.matrix),ncol(this.matrix)]   # or
this.matrix[3:dim(this.matrix)[1],dim(this.matrix)[2]]

As you can see, the R version requires more typing, and I am a lousy
typist.

It doesn't save typing, but a more readable version would be

rows <- nrow(this.matrix)
cols <- ncol(this.matrix)
this.matrix[3:rows, cols]

I would have used

this.matrix[-(1:2), ncol(this.matrix)]

which I find much clearer as to its intentions.

With this in mind, I wanted to try to implement something like this in
R.  It seems like that in order to be able to do this, I would have to
be able to access the parse tree of the expression currently being
evaluated by the interpreter from within my End function-- is this
possible?  Since the "[" and "[[" operators are primitive I can't see
their arguments via the call stack functions...

Anyone got a workaround?  Would anybody else like to see this feature
added to R?

Learning to use the power of R's indexing and functios like head() and tail() (which are just syntactic sugar) will probably lead you not to miss this.

I like the general rule that subexpressions have values that can be evaluated independent of context, so I don't think this is a good idea.

Also, '[' is generic, so it would need to be done in such a way that it applied to all methods. As arguments other than the first are passed unevaluated to the methods, I don't think this is really possible (you don't even know if the third argument to `[` is a dimension for a method).

Also, this would effectively make 'end' a reserved word, or 3:end is ambiguous (or at best context-dependent).

--
Brian D. Ripley,                  rip...@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to