[R] The end of Matlab

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Fri Dec 12 09:41:21 CET 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?
>>
>> 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]
>

and if nrow(this.matrix) is less than 3?


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


but this 'general rule' is not really adhered to in r!  one example
already discussed here at length is subset:

subset(data.frame(...), select=a)

what will be selected?  column named "a", or columns named by the
components of the vector a?  this is an example of how you can't say
what an expression means in a context-independent manner.  and this is
an ubiquitous problem in r.


vQ



More information about the R-help mailing list