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