2016-08-21 3 views
1

У меня есть большой 4-мерный массив и хотел бы подмножить этот массив в список, в котором каждый элемент списка является массивом.Создать список массивов подмножеством одного массива R

данных Пример:

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]

Looping над 4-го измерения, чтобы подмножество, где я врезался в стену. Я хотел бы подмножество по 4-му измерению, которое в этом примере является «видом». В частности, я хотел бы создать список массивов для каждых двух видов. Таким образом:

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) 

Полный набор данных имеет 4-е измерение, состоящий из 111 видов так решение, которое может обрабатывать нечетное число будет лучше. Спасибо!

ответ

1

Мы получаем длину 4-го измерения ('n'), получаем последовательность чередующихся элементов ('i1'), создаем 'array.list' из length 'i1'. Прокрутите последовательность «array.list» и назначьте каждый из элементов «array.list» подмножеством «data.array» на основе индекса, который мы создали «i1».

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)] 
} 
+1

Спасибо, что это именно то, что мне нужно! – Flammulation

Смежные вопросы