R: подмножество N-мерных массивов

Рассмотрим следующий трехмерный массив:

set.seed(123)
arr = array(sample(c(1:10)), dim=c(3,4,2))

который дает

> arr
, , 1

     [,1] [,2] [,3] [,4]
[1,]   10    9    8    2
[2,]    5    1    4   10
[3,]    6    7    3    5

, , 2

     [,1] [,2] [,3] [,4]
[1,]    6    7    3    5
[2,]    9    8    2    6
[3,]    1    4   10    9

Я хотел бы поднастроить это как

arr[c(1,2), c(2,4), c(1)]

но суть в том, что я не знаю (а) какие индексы или (б) какие измерения это индексы.

Как лучше всего получить доступ к N-мерному массиву с индексными переменными?

ll = list(c(1,2), c(2,4), c(1))

arr[ll]              # doesn't work
arr[grid.expand(ll)] # doesn't work
# ..what else?
4 голоса | спросил Michael Schubert 30 Jam1000000amThu, 30 Jan 2014 01:32:23 +040014 2014, 01:32:23

2 ответа


0

используйте do.call, например:

do.call(`[`, c(list(arr), ll))

или более аккуратно, используя функцию-обертку:

getArr <- function(...) 
   `[`(arr, ...)

do.call(getArr, ll)

     [,1] [,2]
[1,]   10    5
[2,]    7    3
ответил Ricardo Saporta 30 Jam1000000amThu, 30 Jan 2014 01:39:20 +040014 2014, 01:39:20
0

В asub /code> package:

abind

, который также может сделать намного больше, в частности извлечь по подмножеству измерений ( https://stackoverflow.com/a /17752012/1201032 ). Стоит иметь в своем наборе инструментов.

ответил flodel 30 Jam1000000amThu, 30 Jan 2014 03:52:23 +040014 2014, 03:52:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132