Search code examples
rindexingvariable-length

Differences in indexing of vector between using length and a sequence


I am setting up a vector data, and want to extract a part of it.

I tried two methods, as shown below. I thought these should have the same output, but results are different. Why?

data1<- c( 1, 2, 3, 4, 5 )

data1[ length( data1 ) - 2 : length( data1 ) ]    
# ; [1] 3 2 1

data1[ 3 : 5 ]    
# ; 3 4 5

Solution

  • Because of operator precedence (check ?Syntax - unary -, + is above sequence operator :), wrap it with () to evaluate as a block

    data1[(length(data1)-2):length(data1)]
    #[1] 3 4 5
    

    length( data1 ) - 2 : length( data1 )
    #[1] 3 2 1 0
    
    (length( data1 ) - 2) : length( data1 )
    #[1] 3 4 5