Convertendo o argumento da função R em uma string
Eu tenho uma função que parece
my_function <- function(object)
{
# code goes here
}
Gostaria que a função (entre outras coisas) exibisse o nome do argumento (conforme passado para a função). Portanto, se minha chamada de função for:
xxx <- my_function(my_object)
então gostaria de saber como obter a função para imprimir a string "my_object".
Alguém pode ajudar por favor?
Respostas
Eu sugeriria a próxima abordagem mais próxima do que você deseja. Com certeza você pode modificá-lo para obter outras saídas:
#Function
my_function <- function(x)
{
as.character(eval(parse(text=enquo(x)))[2])
}
#Apply
my_function(x = my_object)
Resultado:
[1] "my_object"
Uma melhoria graças a @MrFlick é a próxima:
#Function
my_function <- function(x)
{
rlang::as_label(rlang::enquo(x))
}
#Apply
my_function(x = my_object)
O que produz a mesma saída com um estilo mais elegante na função:
[1] "my_object"
Uma Rsolução mais -ish seria usar substitute(obter substituto para obj) em combinação com deparse(lançar símbolo para string):
my_function <- function(obj) {deparse(substitute(obj))}
RRegra geral de metaprogramação: prefira substitute!
my_function(my_object)
## [1] "my_object"
Para exibir a chamada inteira, use match.callassim:
f <- function(x) { print(match.call()); x }
f(pi)
## f(x = pi)
## [1] 3.141593
SE desejar exibir a chamada apenas para depuração, sem modificar a própria função, use trace:
g <- function(x) x # test function
trace(g)
g(pi)
## trace: g(pi)
## [1] 3.141593