Как передать «ничто» в качестве аргумента `[` для поднабора?
Я надеялся, что смогу построить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
, но блин.
(FWIW, у меня есть альтернативные функции, которые выполняют желаемую работу либо черезmelt/recast
или страшный "построить строку, а затемeval(parse(mystring))
, но я хотел сделать это "лучше".)
Редактировать: кроме этого, я запустил версию этого кода (с эквивалентом установки TRUE в DWin) для функции, которая использовалаmelt & acast
; последний был в несколько раз медленнее и не вызывал удивления.