Stellen Sie sich vor, Sie haben ein 3-dimensionales Array mit Zeilen, Spalten und Layern:
%Vor% und stellen Sie sich vor, Sie haben eine Funktion, die eine Matrix als Eingabe verwendet und eine Matrix als Ausgabe zurückgibt, wie t
.
Wie können Sie die Funktion auf jede Ebene des Arrays anwenden, indem Sie ein anderes Array derselben Größe wie das erste zurückgeben?
Ich glaube, ich sollte es irgendwie mit apply
machen können, aber ich kann nicht.
Bonusfrage (Ich wäre sehr dankbar, wenn Sie dies beantwortet hätten): Ist es schneller, oder machen Sie eine Liste der einzelnen Ebenenmatrizen und lapply
der Funktion?
-
Edit: Bitte denken Sie nicht, dass diese Frage beantwortet wird - die Antwort beantwortet die Frage nicht.
Sie müssen überlegen, über welche Ränder Sie die Werte extrahieren möchten.
Sie können jede der 3rd
-Dimensionsmatrizen transponieren, indem Sie die Dimensionen 1 und 2 anwenden (Zeilen und Spalten ohne ein besseres Wort)
Sie können auch plyr
und aaply
verwenden, die möglicherweise intuitiver agieren
Was ist schneller lapply
oder apply
, würde ich vielleicht denken, dass lapply
gewinnen würde, aber Sie müssten immer noch darüber nachdenken, aus welchen Margen Sie die Matrizen extrahieren wollten.
Ich finde es normalerweise viel einfacher, in einer Dimension zu denken. Alles wäre einfacher, wenn die Erde flach wäre!
Eine andere Möglichkeit für die Transposition ist die Funktion aperm
.
Was das Anwenden einer Funktion auf jede Ebene betrifft (sagen wir, Sie möchten jede Ebene mit einem anderen Wert multiplizieren), ist hier eine andere Möglichkeit:
%Vor% Aber wie Sie sehen, erstellt es eine Liste, also benötigt es einen weiteren Schritt mit der Funktion simplify2array
:
Oder direkt mit sapply
:
Tags und Links r