Sie könnten bekommen, was Sie wollten:
%Vor%Und wenn du sehen willst, was ich herausgefunden habe, dann benutze:
%Vor%Da Sie 'formula' (schlechte Namenwahl übrigens) aus der aufrufenden Umgebung übergeben haben, müssen Sie das Objekt möglicherweise aus dem übergebenen Objekt extrahieren:
%Vor% @JPMac bot eine kompaktere Methode an: formula(model)
. Es lohnt sich auch, den Mechanismus der Funktion formula.lm
zu betrachten. Die Funktion formula
ist generisch und Sie verwenden methods(formula)
, um zu sehen, welche S3-Methoden definiert wurden. Da die Methode formula.lm
am Ende ein Sternchen hat, müssen Sie sie in 'getAnywhere:
Es wird also "$" verwendet, um das Listenelement "formula" zu extrahieren, anstatt es aus dem Aufruf zu ziehen. Wenn das $ formula-Element fehlt (was in Ihrem Fall der Fall ist), ersetzt es das mit formula(x$terms)
, von dem ich vermute, dass es formula.default
aufruft, und die Operation dieser Funktion scheint nur die Umgebung des Objekts anzupassen .
Wie bereits erwähnt, erhalten Sie mit model$call
den Aufruf, der das Objekt lm
erstellt hat, aber wenn dieser Aufruf selbst ein Objekt als Modellformel enthält, erhalten Sie den Objektnamen, nicht die Formel.
Auf das ausgewertete Objekt, dh die Formel selbst, kann in model$terms
zugegriffen werden (zusammen mit einer Reihe zusätzlicher Informationen darüber, wie es behandelt wurde). Dies sollte unabhängig von den Details des Aufrufs von lm
funktionieren.