michael
michael

Reputation: 195

R Finding name of assignee variable from inside called function

Say that I have the following function:

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

output assigned to my_var!

I am looking for something that does the job of get_assignee_name() above. It should be a function or a few lines of code that is called from inside a function, it examines the call that it occurs inside of and returns the object that is being assigned to as a character, if one exists. So in the example

answer <- myfun(10)

the message "output assigned to answer!" should appear.

I am aware that this seems unnecessarily complicated, but it is just an example to demonstrate the point for a more complicated use case. I am also aware that of ways around this involving passing the variable name into the function as a parameter and then calling assign. This won't solve the problem in this case, where this should be transparent to the user

Upvotes: 0

Views: 61

Answers (1)

Roland
Roland

Reputation: 132969

This is not possible because <- is a primitive and quite special function. It is not part of the call stack. You would need to use assign instead:

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

However, I suggest you reconsider how you approach your actual issue.

Upvotes: 3

Related Questions