Присвоение разных значений нескольким подмассивам

У меня есть массив x со случайными значениями от 1:10, назначенными каждому подмассиву в пределах x.

x <- array(sample(1:10), dim = c(5, 5, 2)) # 5 rows, 5 columns, 2 levels
x

Это дает

x
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    6    7    6    7    6
[2,]    8    5    8    5    8
[3,]    9   10    9   10    9
[4,]    3    4    3    4    3
[5,]    2    1    2    1    2

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]    7    6    7    6    7
[2,]    5    8    5    8    5
[3,]   10    9   10    9   10
[4,]    4    3    4    3    4
[5,]    1    2    1    2    1

В каждом подмассиве выше пример(...) случайным образом выбирает значения в масштабе 1:10 и присваивает их x.

Существует ли существующая функция R, которая автоматически случайным образом присваивает пропорцию значений каждому уровню массива? Скажем, только 1:2 на первый уровень, только значения 8:9 на второй уровень и только значения 3, 4, 5, 6, 7, 10 на третий уровень.

Я знаю, как это сделать с помощью подмножества ([]), но подмножество становится утомительным, когда количество уровней велико (скажем, 10 или более, а не только 3 (как указано выше)).


person compbiostats    schedule 02.02.2018    source источник


Ответы (1)


В библиотеке abind есть функция abind, которая поможет сделать то, что вы хотите.

Я реализовал список со всеми желаемыми диапазонами, а затем использовал этот список для создания нового массива с третьим измерением. Параметр along указывает abind добавить третье измерение.

subsets <- list(c(1,2),c(8:10),c(3,4,5,6,7))
# first array
x <- array(sample(subsets[[1]],25,replace=T),dim=c(5,5))
# 2:n arrays added to x
for (i in 2:length(subsets)) {
    x <- abind(x,array(sample(subsets[[i]],25,replace=T),dim=c(5,5)),along=3)
}
person Edward Carney    schedule 02.02.2018