为多个子数组分配不同的值

Assigning different values to multiple subarrays

我有一个数组 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

在 sample(...) 上方的每个子数组中随机选择 1:10 中的值并将它们分配给 x。

是否有现有的 R 函数可以自动将一定比例的值自动分配给数组的每一层?比如说,第一级只有 1:2,第二级只有 8:9,第三级只有 3、4、5、6、7、10。

我知道如何使用子集化 ([]) 来做到这一点,但是当级别数很大时(比如 10 个或更多,而不是只有 3 个(如上所述)),子集化变得乏味。

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)
}