Circular shift of vector (equivalent to numpy.roll)

后端 未结 4 1337
悲&欢浪女
悲&欢浪女 2020-11-28 15:25

I have a vector:

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

And I\'d like to do something like:

b <- roll(a, 2) # 4,5,1,2,3

Is t

4条回答
  •  北海茫月
    2020-11-28 15:32

    How about using head and tail...

    roll <- function( x , n ){
      if( n == 0 )
        return( x )
      c( tail(x,n) , head(x,-n) )
    }
    
    roll(1:5,2)
    #[1] 4 5 1 2 3
    
    #  For the situation where you supply 0 [ this would be kinda silly! :) ]
    roll(1:5,0)
    #[1] 1 2 3 4 5
    

    One cool thing about using head and tail... you get a reverse roll with negative n, e.g.

    roll(1:5,-2)
    [1] 3 4 5 1 2
    

提交回复
热议问题