[R] The end of Matlab

Duncan Murdoch murdoch at stats.uwo.ca
Fri Dec 12 08:38:35 CET 2008

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?
> 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]

> 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?

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.

Duncan Murdoch

More information about the R-help mailing list