Я надеялся построить конструкцию 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
; последний был в несколько раз медленнее, чем настоящий сюрприз.