[R] The end of Matlab

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Fri Dec 12 16:56:30 CET 2008


Claudia Beleites wrote:
>>> Wacek:
>>>       
>>>> x[3:]
>>>> instead of
>>>> x[3:length(x)]
>>>> x[3:end]
>>>>         
>>> I don't think that would help:
>>> what to use for end - 3 within the convention that negative values mean
>>> exclusion?
>>>       
>> might seem tricky, but not impossible:
>>
>> x[-2]
>> # could mean 'all except for 2nd', as it is now
>>
>> x[1:-2]
>> # could mean 'from start to the 2nd backwards from the end'
>>     
> I know you get thus far. You might even think to decide whether exclusion or 
> 'from the end' is meant from ascending ./. descending order of the sequence, 
> but this messes around with returning the reverse order.
>
>   

that's a design issue.  one simple solution is to have this sort of
indexing return always in ascending order.  thus,

x = 1:5
x[1:-1]
# 1 2 3 4 5
x[5:-5]
# NULL rather than 5 4 3 2 1 -- as in matlab or python

x[seq(5,1)]
# 5 4 3 2 1

that is, the ':'-based indexing can be made not to mess with the order. 
for reversing the order, why not use:

x[5:-1:1]
# 5 4 3 2 1

x[-3:-1:-5]
# 3 2 1 rather than x[c(-3,-4,-5)], which would be 1 2


>> since r disallows mixing positive and negative indexing, the above would
>> not be ambiguous.  worse with
>>
>> x[-3:-1]
>>
>> which could mean both 'except for 3rd, 2nd, and 1st' and 'from the 3rd
>> to the 1st from the end', and so would be ambiguous.  in this context,
>> indeed, having explicit 'end' could help avoid the ambiguity.
>>     
> that's the problem.
> also: how would 'except from the 5th last to the 3rd last' be expressed?
>   

for exclusions you'd need to use negative indices anyway:

x[seq(-5,-3)]

now, neither x[-5:-3] nor x[-3:-5] would do the job they do now, but the
above is not particularly longer, while selecting the
5th-to3rd-from-the-end columns is simply x[-5:-3] (which could be made
to fail on out-of-range indices) instead of something like x[length(x) -
4:2] (which will silently do the wrong thing if length(x) < 4, and thus
requires extra care).

this is a rather loose idea, and unrealistic in the context of r, but i
do not see much problem with it on the conceptual level.

vQ



More information about the R-help mailing list