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

时间:2018-02-02 18:37:57

标签: r sample sub-array

我有一个数组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个(如上所述)),子集化变得乏味。

1 个答案:

答案 0 :(得分:0)

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