получение аргументов родительской функции в R с именами

Я пытаюсь написать функцию, которая фиксирует аргументы функции, из которой она вызывается. Например,

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 () не добавляет имена параметров соответствия со значениями аргументов, и я хотел бы написать аналогичную версию get_args, которая возвращает вывод, аналогичный

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

$x
[1] 1

$y
[1] 2

$z
[1] 3

Замена "get_args ()" на "match.call ()" напрямую не является решением, которое я ищу, поскольку в действительности get_args будет делать некоторые другие вещи перед возвратом аргументов своих родительских функций.

Я пытался использовать match.call () с sys.parent () несколькими способами, но не могу заставить функцию возвращать аргументы вызывающей стороны; он просто возвращает аргументы get_args ().

Есть ли способ сделать так, чтобы get_args () возвращал выходные данные, идентичные таковым для caller2 для приведенного выше теста? Я знаю, что именование аргументов вручную возможно с использованием formals (), но гарантированно ли это равнозначно?

Если требуется какое-либо разъяснение, оставьте комментарий ниже. Благодарю.

РЕДАКТИРОВАТЬ 1:

Цель get_args () - действовать как удобный способ получения аргументов, с которыми была вызвана функция. Тип as.list (match.call ()) [- 1] устареет, но поскольку match.call перехватывает ближайший вызов функции, он просто получает аргументы get_args () в данный момент.

get_args () также получит аргументы по умолчанию от родительской функции, но это легко реализовать.

РЕШЕНИЕ:

спасибо Hong Ooi, ключ к использованию match.call, кажется, обеспечивает оба вызоваа также определение функции, о которой вы хотите узнать. Немного измененная, анонимно-дружественная версия get_args ниже для потомков

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

}

Эта версия находит функцию дальше по стеку вызовов, захватывает ее определение и вызов и сопоставляет параметры с ее аргументами.

Ответы на вопрос(1)

Ваш ответ на вопрос