Wie übergebe ich "nichts" als Argument an "[" für die Teilmenge?

Ich hatte gehofft, einen bauen zu könnendo.call Formel für die Teilmenge, ohne den tatsächlichen Bereich jeder Dimension im Eingabearray identifizieren zu müssen. Das Problem, auf das ich stoße, ist, dass ich nicht herausfinden kann, wie ich die direkte Funktion nachahmen kannx[,,1:n,] Wenn in den anderen Dimensionen kein Eintrag vorhanden ist, bedeutet dies "Alle Elemente greifen".

Hier ist ein Beispielcode, der fehlschlägt. Soweit ich das beurteilen kann[ oderdo.call ersetzt meineNULL Werte auflisten mit1 für den Index.

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)) 

Ich nehme an, ich könnte eine Lösung durch Zuweisen des Werts verwerfen-2*max(dim(x)) zu jedem Element vondimlist, aber igitt.
(FWIW, ich habe alternative Funktionen, die den gewünschten Job entweder über erledigenmelt/recast oder die gefürchteten "bauen einen string auf und danneval(parse(mystring)) , aber ich wollte es "besser" machen.)

Bearbeiten: beiseite, ich habe eine Version dieses Codes (mit dem Äquivalent von DWins TRUE-Setup) gegen eine Funktion ausgeführt, die verwendet wurdemelt & acast ; Letzteres war mehrmals langsamer, was nicht wirklich überraschte.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage