У меня есть следующая функция, которая работает, но я чувствую, что есть более быстрый (или векторизованный, или, возможно, пакет или встроенный?) Способ написать это?
create_seq <- function(n, len) {
mat <- matrix(nrow = length(0:(n-len)), ncol = n)
for(i in 0:(n-len)) {
mat[i + 1, ] <- c(rep(0L, i), rep(1L, len), rep(0L, n - (len + i)))
}
return(mat)
}
create_seq(10, 3)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] 1 1 1 0 0 0 0 0 0 0
#> [2,] 0 1 1 1 0 0 0 0 0 0
#> [3,] 0 0 1 1 1 0 0 0 0 0
#> [4,] 0 0 0 1 1 1 0 0 0 0
#> [5,] 0 0 0 0 1 1 1 0 0 0
#> [6,] 0 0 0 0 0 1 1 1 0 0
#> [7,] 0 0 0 0 0 0 1 1 1 0
#> [8,] 0 0 0 0 0 0 0 1 1 1
create_seq(10, 5)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#> [1,] 1 1 1 1 1 0 0 0 0 0
#> [2,] 0 1 1 1 1 1 0 0 0 0
#> [3,] 0 0 1 1 1 1 1 0 0 0
#> [4,] 0 0 0 1 1 1 1 1 0 0
#> [5,] 0 0 0 0 1 1 1 1 1 0
#> [6,] 0 0 0 0 0 1 1 1 1 1
create_seq(7, 2)
#> [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> [1,] 1 1 0 0 0 0 0
#> [2,] 0 1 1 0 0 0 0
#> [3,] 0 0 1 1 0 0 0
#> [4,] 0 0 0 1 1 0 0
#> [5,] 0 0 0 0 1 1 0
#> [6,] 0 0 0 0 0 1 1