Jak przekazać „nic” jako argument do `[` dla podzbioru?
Miałem nadzieję, że uda mi się skonstruowaćdo.call
wzór na podzbiór bez konieczności identyfikowania rzeczywistego zakresu każdego wymiaru w tablicy wejściowej. Problem, z którym się spotykam, polega na tym, że nie mogę zrozumieć, jak naśladować funkcję bezpośredniąx[,,1:n,]
, gdzie brak wpisu w innych wymiarach oznacza „złap wszystkie elementy”.
Oto przykładowy kod, który się nie udaje. O ile wiem, również[
lubdo.call
zastępuje mojeNULL
wartości listy z1
dla indeksu.
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))
Przypuszczam, że mógłbym stworzyć rozwiązanie, przypisując wartość-2*max(dim(x))
do każdego elementudimlist
, ale fuj.
(FWIW, mam alternatywne funkcje, które wykonują żądaną pracę za pośrednictwemmelt/recast
lub przerażony „zbuduj strunę, a potemeval(parse(mystring))
, ale chciałem to zrobić „lepiej”)
Edytuj: na marginesie, uruchomiłem wersję tego kodu (z odpowiednikiem TRUE w konfiguracji TRUE) przeciwko funkcji, która używałamelt & acast
; ten ostatni był kilka razy wolniejszy, bez prawdziwej niespodzianki.