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.