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
但是,我建议您重新考虑您处理实际问题的方式。
假设我有以下功能:
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
但是,我建议您重新考虑您处理实际问题的方式。