R从被调用函数内部查找受让人变量的名称

R Finding name of assignee variable from inside called function

假设我有以下功能:

myfun <- function(x){
     assignee <- get_assignee_name()
     message(paste0("output assigned to ",assignee,"!"))
     x
   }
my_var <- myfun(7)

output assigned to my_var!

我正在寻找可以完成上述 get_assignee_name() 工作的东西。 它应该是一个函数或从函数内部调用的几行代码,它检查它在内部发生的调用和 returns 作为字符分配给的对象(如果存在)。所以在例子中

answer <- myfun(10)

消息 "output assigned to answer!" 应该出现。

我知道这似乎不必要地复杂,但这只是一个示例,用于演示更复杂的用例的意义。我也知道解决这个问题的方法包括将变量名作为参数传递给函数,然后调用 assign。在这种情况下,这不会解决问题,这对用户来说应该是透明的

这是不可能的,因为<-是一个原始且非常特殊的函数。它不是调用堆栈的一部分。您需要使用 assign 代替:

myfun <- function(x){
  assignee <- sys.call(1)
  if (assignee[[1]] == quote(assign)) 
    message(paste0("output assigned to ",assignee[[2]],"!"))
  x
}
assign("my_var", myfun(7))
#output assigned to my_var!
my_var
#[1] 7

但是,我建议您重新考虑您处理实际问题的方式。