R Нахождение имени переменной-правопреемника из вызываемой функции - PullRequest
0 голосов
/ 08 ноября 2019

Скажите, что у меня есть следующая функция:

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 (). Это должна быть функция или несколько строк кода, вызываемых изнутри функции, она проверяет вызов, который происходит внутри нее, и возвращает объект, которому назначается символ, если таковой существует. Так в примере

answer <- myfun(10)

выводится сообщение «Вывод назначен на ответ!»должен появиться.

Я знаю, что это кажется излишне сложным, но это всего лишь пример, чтобы продемонстрировать смысл более сложного варианта использования. Мне также известно, что в некоторых случаях это связано с передачей имени переменной в функцию в качестве параметра и последующим вызовом assign. Это не решит проблему в этом случае, где это должно быть прозрачно для пользователя

1 Ответ

3 голосов
/ 08 ноября 2019

Это невозможно, потому что <- - примитивная и совершенно особая функция. Это не часть стека вызовов. Вам нужно будет использовать 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

Тем не менее, я предлагаю вам пересмотреть, как вы подходите к вашей реальной проблеме.

...