R中的圆形移位阵列距离n

use*_*468 5 r

说我有

a <- c(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

并且我想通过将它在"左"方向上移动距离1来从a导出b

b
# [1] 2 3 1
Run Code Online (Sandbox Code Playgroud)

通过推导我的意思是你:

  1. 将"a"传递给吐出"b"的函数
  2. 你使用某种索引短路就可以做到这一点.
  3. b <- c(2, 3, 1)例如,不是我正在寻找的解决方案

什么是优雅/有效的方法呢?

A5C*_*2T1 16

您可以使用headtail创建这样的函数:

shifter <- function(x, n = 1) {
  if (n == 0) x else c(tail(x, -n), head(x, n))
}
Run Code Online (Sandbox Code Playgroud)

用法:

a <- 1:4

shifter(a)
# [1] 2 3 4 1

shifter(a, 2)
# [1] 3 4 1 2
Run Code Online (Sandbox Code Playgroud)

(或者,library(SOfun); shifter(a)你可以SOfun这里得到的地方).