Ich möchte eine multivariable Funktion definieren und dann auf einem Array von Vektoren arbeiten, mit den Elementen der Vektoren die Werte der Variablen. Ersetzen Sie das Array durch ein Array der Ausgaben der Funktion. Bei einer Version mit zwei Variablen funktioniert die äußere (oder äußere + Vektorisierung) -Option. Aber für höhere Dimensionen kann ich nicht auf etwas Sauberes und Transparentes kommen.Multivariable Funktion auf einem Array von Vektoren in R
Ich werde ein Zwei-Variablen (zwei-dimensional) Beispiel verwenden, bin aber an einer Lösung interessiert, die nicht darauf beschränkt ist.
definieren Vektoren, beispielsweise Temperaturen und Zeiten:
temp=seq(10,50,10)
time=seq(5,10,1)
Dieses verwendet werden könnte unter Verwendung eines Arrays expand.grid
arrayInput <- expand.grid(temp=seq(10,50,10), time=seq(5,10,1))
Der Ausgang ist eine Anordnung von 30 Reihen zu konstruieren, durch 2 Spalten. Kann jetzt eine Funktion von Temperatur und Zeit definieren.
func <- function(temp, time) time*exp(-1/temp)
Was würde ich zu tun ist arrayInput neu anordnen, so dass sie ein Array mit der Dimension 5 x 6 x 2 und den Betrieb auf diesem Array mit FUNC einen 5 x 6 Array von Werten für die Funktion gegeben erzeugen die Paar von Eingaben, Temp und Zeit.
So etwas ist in Mathematica mit Apply einfach. Ich habe einige Möglichkeiten gefunden, dies in R zu tun, aber sie sind hässlich, behalten Sie nicht die Namen der Variablen usw., was es weniger klar macht, was der Code macht.
Wer weiß, eine schöne Weise, dies zu erreichen? Wie gesagt, wenn ich eine Funktion von 5 Variablen hätte, würde ich gerne in der Lage sein, die Operation auf die gleiche Weise auszuführen.
Danke,
Steve
Eine nette Funktion ist "äußere". Ich denke, dies berechnet Ihre gewünschte Ausgabe, obwohl die Eingabe nur die anfänglichen Vektoren ist: "äußere (seq (10,50,10), seq (5,10,1), Funktion (temp, time) time * exp (-1/temp)) ' – lmo
Danke, ich erwähnte äußerlich im ersten Absatz, und es ist nett, und vielleicht könnte ich dies auf höhere äußere (äußere()) Dimensionen erweitern. – SteveK
Jemand nahm einen Riss bei einer 'multi.outer' Funktion hier: http://stackoverflow.com/questions/6192848/how-to-generalize-outer-to-n-dimensions – SteveK