Позвольте мне ответить на свой вопрос, чтобы закрыть его должным образом, используя невероятно простое и легкое решение из комментария Хенрика :
matrix(v, nrow = 3, ncol = 4, byrow = TRUE)[ , 1:3]
Может быть, byrow = TRUE
соответствует трем шаги иллюстрации лучше всего концептуально , но результат такой же:
matrix(v, nrow = 4, ncol = 3)[1:3, ]
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 2 3 1
# [3,] 3 1 2
Поскольку может быть « много векторов с разной длиной », это может удобно сделать простую функцию и применить ее к векторам, хранящимся в list
:
cycle = function(x){
len = length(x)
matrix(x, nrow = len + 1, ncol = len)[1:len , ]
}
l = list(v1 = 1:3, v2 = letters[1:4])
lapply(l, cycle)
# $v1
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 2 3 1
# [3,] 3 1 2
#
# $v2
# [,1] [,2] [,3] [,4]
# [1,] "a" "b" "c" "d"
# [2,] "b" "c" "d" "a"
# [3,] "c" "d" "a" "b"
# [4,] "d" "a" "b" "c"