Вы можете сделать это, заполнив сначала объявление полного вектора, а затем сразу заполняя индексы для каждого распределения:
out_length = 4L * 2L
# every fourth element will come from rnorm; the rest from runif
norm_idx = seq(4L, out_length, by = 4L)
n_norm = length(norm_idx)
# declare output
out = numeric(out_length)
out[norm_idx] = rnorm(n_norm)
out[-norm_idx] = runif(out_length - n_norm)
В качестве альтернативы, вот хитрый способ выполнить sh, используя индексирование матрицы:
set.seed(394839)
m = matrix(0, nrow = 4L, ncol = 2L)
m[1:3, ] = runif(3L * ncol(m))
m[4L, ] = rnorm(ncol(m))
c(m)
# [1] 0.4478556 0.1336022 0.5860134 -0.1626707 0.7055598 0.7631879 0.3132743 1.5485366
в R, матрицы - это просто векторы с измерениями, и они заполняют столбец за столбцом - следовательно, мы можем объявить эту матрицу:
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 3 5 7 9
# [2,] 2 4 6 8 10
следующим образом :
matrix(1:10, nrow = 2L, ncol = 5L)
Имея это в виду, мы можем скопировать ваш шаблон 3-1-3-1, сделав 3-1 шаблоном в каждом столбце.
Вы можете подтвердить, что он работает путем увеличения (так, чтобы небольшие эффекты семпла были приглушены):