我有一个功能类似于
my_function <- function(object)
{
# code goes here
}
我想让函数(除其他外)打印自变量的名称(传递给函数)。因此,如果我的函数调用是:
xxx <- my_function(my_object)
然后,我想知道如何获取该函数以打印出字符串"my_object"
。
有人可以帮忙吗?
答案 0 :(得分:4)
更R
的解决方案是结合使用substitute
(代替obj
)和deparse
(将符号转换为字符串):
my_function <- function(obj) {deparse(substitute(obj))}
一般的R
元编程规则:更喜欢substitute
!
my_function(my_object)
## [1] "my_object"
答案 1 :(得分:2)
我建议采用更接近您想要的方法。当然可以修改它以获得其他输出:
#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"
答案 2 :(得分:1)
要显示整个通话,请像这样使用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