[R] Is there a better way than x[1:length(x)-1] ?

Gabor Csardi csardi at rmki.kfki.hu
Thu Aug 10 11:30:55 CEST 2006


Jack,

in R ":" is an ordinary function with two arguments, ie. 1:10 is a function
call with arguments 1 and 10. This way at the time ":" is evaluated the
variable which will be indexed is not known; it is thus impossible to know
its length. This is why it is not easy to implement "end" in R. 

Since R is very good at computing 'on the language' there might be a way (i
would call it hack) to implement 'end' but i'm not aware of it. 
Eg. you might consider writing a function like 

idx <- function(x, i) {
  i <- substitute(i)
  i <- eval(i, c(as.list(parent.frame()), end=length(x)))
  x[i]
}
      
and then you can write things like this:

x <- 1:10
idx(x, 2:end)
idx(x, 2:(end-1))

R gurus, please correct me if i'm wrong. 
Gabor

On Wed, Aug 09, 2006 at 05:30:47PM -0700, John McHenry wrote:
> Hi WizaRds,
> 
> In MATLAB you can do
> 
> x=1:10
> 
> and then specify
> 
> x(2:end)
> 
> to get 
> 
> 2 3 4 5 6 7 8 9 10
> 
> or whatever (note that in MATLAB the parenthetic index notation is used, not brackets as in R). The point is that 'end' allows you to refer to the final index point of the array.
> 
> Obviously there isn't much gain in syntax when the variable name is x, but when it's something like 
> 
> hereIsABigVariableName(j:end-i)
> 
> it makes things a lot more readable than 
> 
>  hereIsABigVariableName(j:length(hereIsABigVariableName)-i)
> 
> In R I could do:
> 
> n<- length(hereIsABigVariableName)
>  hereIsABigVariableName[j:n-i]
> 
> but I'd like to use something like 'end', if it exists.
> 
> Am I missing something obvious in R that does what 'end' does in MATLAB?
> 
> Thanks,
> 
> Jack.
> 
>  		
> ---------------------------------
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at stat.math.ethz.ch 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.

-- 
Csardi Gabor <csardi at rmki.kfki.hu>    MTA RMKI, ELTE TTK



More information about the R-help mailing list