将R函数参数转换为字符串

问题描述

我有一个功能类似于

my_function <- function(object)
{
  # code goes here
}

我想让函数(除其他外)打印自变量的名称(传递给函数)。因此,如果我的函数调用是:

xxx <- my_function(my_object)

然后,我想知道如何获取函数以打印出字符串"my_object"

有人可以帮忙吗?

解决方法

R的解决方案是结合使用substitute(代替obj)和deparse(将符号转换为字符串):

my_function <- function(obj) {deparse(substitute(obj))}

一般的R元编程规则:更喜欢substitute

my_function(my_object)
## [1] "my_object"
,

我建议采用更接近您想要的方法。当然可以修改它以获得其他输出:

#Function
my_function <- function(x)
{
  as.character(eval(parse(text=enquo(x)))[2])
}
#Apply
my_function(x = my_object)

输出:

[1] "my_object"

接下来是@MrFlick的改进:

#Function
my_function <- function(x)
{
  rlang::as_label(rlang::enquo(x))
}
#Apply
my_function(x = my_object)

在函数中产生相同输出且样式更优雅的

[1] "my_object"
,

要显示整个通话,请像这样使用match.call

f <- function(x) { print(match.call()); x }
f(pi)
## f(x = pi)
## [1] 3.141593

如果希望仅在调试时显示调用而不修改函数本身,则使用trace

g <- function(x) x  # test function

trace(g)
g(pi)
## trace: g(pi)
## [1] 3.141593