Я надеялся построить конструкцию do.call для подмножества без необходимости определять фактический диапазон каждого измерения во входном массиве.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как имитировать прямую функцию x[,,1:n,], где никакая запись в других измерениях означает "захватить все элементы".
Вот пример кода, который терпит неудачу. Насколько я могу судить, либо [, либо do.call заменяет мои значения NULL на 1 для индекса.
x<-array(1:6,c(2,3))
dimlist<-vector('list', length(dim(x)))
shortdim<-2
dimlist[[shortdim]] <- 1: (dim(x)[shortdim] -1)
flipped <- do.call(`[`,c(list(x),dimlist))
Я полагаю, что я мог бы уничтожить решение, присвоив значение -2*max(dim(x)) каждому элементу dimlist, но yuck.
(FWIW, у меня есть альтернативные функции, которые выполняют желаемую работу либо через melt/recast, либо страшно "строят строку, а затем eval(parse(mystring)), но я хотел сделать это" лучше. ")
Изменить: как в сторону, я запускал версию этого кода (с эквивалентом установки DWin TRUE) против функции, которая использовала melt & acast; последний был в несколько раз медленнее, чем настоящий сюрприз.