Другая опция для функции внутри sapply
заключается в том, чтобы использовать тот факт, что rep
принимает вектор для аргумента times
.Это повторяется 1
x
раз, а затем повторяется 0
V_max - x
раз.
V <- c(10, 20, 15, 22, 60)
V_max <- max(V)
mat <- sapply(V, function(x) rep(c(1L, 0L), times = c(x, V_max - x)))
mat
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 1 1 1
# [2,] 1 1 1 1 1
# [3,] 1 1 1 1 1
# [4,] 1 1 1 1 1
# [5,] 1 1 1 1 1
# [6,] 1 1 1 1 1
# [7,] 1 1 1 1 1
# [8,] 1 1 1 1 1
# [9,] 1 1 1 1 1
# [10,] 1 1 1 1 1
# [11,] 0 1 1 1 1
# [12,] 0 1 1 1 1
# [13,] 0 1 1 1 1
# [14,] 0 1 1 1 1
# [15,] 0 1 1 1 1
# [16,] 0 1 0 1 1
# [17,] 0 1 0 1 1
# [18,] 0 1 0 1 1
# [19,] 0 1 0 1 1
# [20,] 0 1 0 1 1
# [21,] 0 0 0 1 1
# [22,] 0 0 0 1 1
# ...
Теперь для более глупого решения (тот же результат, за исключением имен столбцов)
m <- matrix(0, max(V), length(V))
+(data.frame(row(m)) <= as.list(V))