obtendo os argumentos de uma função pai em R, com nomes

Estou tentando escrever uma função que captura os argumentos da função da qual é chamada. Por exemplo,

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 () infelizmente não adiciona nomes de parâmetros de correspondência com valores de argumento, e eu gostaria de escrever uma versão similar de get_args que retorne uma saída semelhante a

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

$x
[1] 1

$y
[1] 2

$z
[1] 3

substituir "get_args ()" por "match.call ()" diretamente não é a solução que estou procurando, pois, na realidade, get_args fará algumas outras coisas antes de retornar seus argumentos de funções pai.

Eu tentei usar match.call () com sys.parent () de várias maneiras, mas não consigo obter a função para retornar os argumentos do chamador; apenas retorna os argumentos de get_args ().

Existe alguma maneira de tornar a saída de retorno get_args () idêntica àquela do caller2 para o caso de teste acima? Eu sei que nomear os argumentos manualmente é possível usando formals (), mas isso é garantido para ser equivalente?

Se algum esclarecimento for necessário, deixe um comentário abaixo. Obrigado.

EDIT 1:

o objetivo de get_args () é agir como uma maneira amigável de obter os argumentos com os quais uma função foi chamada. Digitar as.list (match.call ()) [- 1] fica antigo, mas como match.call pega a chamada de função mais próxima, ele recebe os argumentos de get_args () no momento.

get_args () também irá receber argumentos padrão da função pai, mas isso é fácil de implementar.

SOLUÇÃO:

obrigado Hong Ooi, a chave para usar match.call parece estar fornecendo tanto a chamadae a definição da função que você deseja descobrir. Uma versão ligeiramente modificada e anônima do get_args está abaixo para a posteridade

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

}

Esta versão encontra a função mais acima na pilha de chamadas, pega sua definição e chama, e combina parâmetros com seus argumentos.

questionAnswers(1)

yourAnswerToTheQuestion