获取R函数返回的变量的名称

获取R函数返回的变量的名称,r,magrittr,pryr,R,Magrittr,Pryr,我有以下代码: library(magrittr) a <- function(cars) return(cars) b <- function(x) return(list(varname = deparse(substitute(x)), content = x)) 库(magrittr) a如果您查看%%>%%操作符中的调用堆栈,您会得到如下结果 a(cars) %>% (function(x) sys.calls()) # [[1]] # a(cars) %>

我有以下代码:

library(magrittr)
a <- function(cars) return(cars)
b <- function(x) return(list(varname = deparse(substitute(x)), content = x))
库(magrittr)

a如果您查看
%%>%%
操作符中的调用堆栈,您会得到如下结果

a(cars) %>% (function(x) sys.calls())

# [[1]]
# a(cars) %>% (function(x) sys.calls())
# [[2]]
# withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
# [[3]]
# eval(quote(`_fseq`(`_lhs`)), env, env)
# [[4]]
# eval(expr, envir, enclos)
# [[5]]
# `_fseq`(`_lhs`)
# [[6]]
# freduce(value, `_function_list`)
# [[7]]
# withVisible(function_list[[k]](value))
# [[8]]
# function_list[[k]](value)
# [[9]]
# (function (x) sys.calls())(.)
您可以看到,当您的函数最终被调用时,您离原始表达式有相当多的距离。问题是该参数可能已在链中重新分配。考虑这个案例

a <- 6
b <- a
f <- function(x) deparse(substitute(x))
f(b)
# [1] "b"
a