obteniendo los argumentos de una función padre en R, con nombres

Estoy tratando de escribir una función que capture los argumentos de la función desde la que se llama. Por ejemplo,

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 () desafortunadamente no agrega nombres de parámetros de coincidencia con valores de argumento, y me gustaría escribir una versión similar de get_args que devuelva una salida similar a

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

$x
[1] 1

$y
[1] 2

$z
[1] 3

Reemplazar "get_args ()" con "match.call ()" directamente no es la solución que estoy buscando, ya que en realidad get_args hará algunas otras cosas antes de devolver los argumentos de las funciones principales.

He intentado usar match.call () con sys.parent () de varias maneras, pero no puedo hacer que la función devuelva los argumentos de la persona que llama; simplemente devuelve los argumentos de get_args ().

¿Hay alguna manera de hacer que get_args () devuelva una salida idéntica a la de caller2 para el caso de prueba anterior? Sé que nombrar los argumentos manualmente es posible usando formales (), pero ¿está garantizado que esto sea equivolant?

Si necesita alguna aclaración, deje un comentario a continuación. Gracias.

EDITAR 1:

El objetivo de get_args () es actuar como una forma fácil de obtener los argumentos con los que se llamó a una función. Al escribir as.list (match.call ()) [- 1] se vuelve viejo, pero debido a que match.call toma la función más cercana, simplemente obtiene los argumentos de get_args () en este momento.

get_args () también obtendrá argumentos predeterminados de la función principal, pero es fácil de implementar.

SOLUCIÓN:

gracias Hong Ooi, la clave para usar match.call parece ser proporcionar la llamaday la definición de la función que desea conocer. Una versión ligeramente modificada y anónima de get_args está abajo para la posteridad

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

}

Esta versión encuentra la función más arriba en la pila de llamadas, captura su definición y llamada, y hace coincidir los parámetros con sus argumentos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta