Abrufen der Argumente einer übergeordneten Funktion in R mit Namen

Ich versuche, eine Funktion zu schreiben, die die Argumente der Funktion erfasst, von der sie aufgerufen wird. Zum Beispiel,

get_args <- function () as.list( sys.call(sys.parent()) )[-1]

caller <- function (x, y, z) {
    get_args()
}
caller(1,2,3)

[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

sys.call () fügt leider keine übereinstimmenden Parameternamen mit Argumentwerten hinzu, und ich möchte eine ähnliche Version von get_args schreiben, die eine Ausgabe ähnlich der zurückgibt

caller2 <- function (x, y, z) {
    as.list( match.call() )[-1]
}
caller2(1,2,3)

$x
[1] 1

$y
[1] 2

$z
[1] 3

Das direkte Ersetzen von "get_args ()" durch "match.call ()" ist nicht die gesuchte Lösung, da get_args in Wirklichkeit einige andere Dinge ausführt, bevor die Argumente der übergeordneten Funktionen zurückgegeben werden.

Ich habe versucht, match.call () auf verschiedene Arten mit sys.parent () zu verwenden, aber ich kann die Funktion nicht bekommen, um die Argumente des Aufrufers zurückzugeben. es gibt nur die Argumente von get_args () zurück.

Gibt es eine Möglichkeit, die Ausgabe von get_args () mit der von caller2 für den obigen Testfall identisch zu machen? Ich weiß, dass die manuelle Benennung der Argumente mit formals () möglich ist. Ist dies jedoch garantiert gleichwertig?

Wenn eine Klarstellung erforderlich ist, hinterlassen Sie unten einen Kommentar. Vielen Dank.

EDIT 1:

Ziel von get_args () ist es, die Argumente, mit denen eine Funktion aufgerufen wurde, benutzerfreundlich abzurufen. Wenn Sie as.list (match.call ()) [- 1] eingeben, wird es alt, aber da match.call den nächsten Funktionsaufruf aufruft, erhält es im Moment nur die Argumente von get_args ().

get_args () ruft auch Standardargumente von der übergeordneten Funktion ab, was jedoch einfach zu implementieren ist.

LÖSUNG:

danke hong ooi, der schlüssel zur verwendung von match.call scheint beides zu seinund Die Definition der Funktion, über die Sie mehr erfahren möchten. Eine leicht modifizierte, anonymisierte Version von get_args ist unten für die Nachwelt

get_args <- function () {
as.list( match.call(
    def = sys.function( -1 ),
    call = sys.call(-1)) )[-1]

}

Diese Version findet die Funktion weiter oben in der Aufrufliste, erfasst ihre Definition und ihren Aufruf und ordnet Parameter ihren Argumenten zu.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage