通过对单个数组R进行子集化来创建数组列表

时间:2016-08-21 17:47:45

标签: arrays r

我有一个大型的4维数组,并希望将此数组子集化为一个列表,其中列表的每个元素都是一个数组。

数据示例:

species<-c("Moose","Deer","Wolf","Bear","Livestock","Human")
unit<-c("A","B")
survey <-1:3
year<-1:3
data <- expand.grid(species=species, unit=unit, survey=survey, year=year)
data$count <- round(rnorm(108,10,2),0)
library(reshape)
data.array <- cast(data, survey~year~unit~species)

data.array的尺寸为[3,3,2,6]

将第四维延伸到子集是我撞墙的地方。我想在第四维中进行分组,在这个例子中是#34;物种&#34;。具体来说,我想为每两个物种创建一个阵列列表。就这样:

array.list <- list()
array.list[[1]] <- data.array[,,,1:2]
array.list[[2]] <- data.array[,,,3:4]
array.list[[3]] <- data.array[,,,5:6]
str(array.list)

完整的数据集具有由111种组成的第4维,因此可以处理奇数的解是最佳的。 谢谢!

1 个答案:

答案 0 :(得分:1)

我们得到第4维的长度('n'),得到交替元素的序列('i1'),创建length'i1'的'array.list'。循环遍历'array.list'的序列,并根据我们创建的'i1'索引,将'array.list'的每个元素与'data.array'的子集一起分配。

n <- dim(data.array)[4]
i1 <- seq(1, n, by = 2)

array.list <- vector("list", length(i1))
for(i in seq_along(array.list)){
  array.list[[i]] <- data.array[,,, i1[i]:pmin(i1[i]+1, n)]
 }