Есть некоторые похожие вопросы к этому, но предоставленные ответы приспособлены к тем вопросам, в которых приведенные примеры намного сложнее, чем в моем сценарии.
У меня есть простая функция, которая создает объект вглобальная среда (global_obj
).
Скажем:
my_function <- function(x){
global_obj <<- x
}
Как настроить функцию для проверки наличия global_obj
в глобальной среде и, если да, длязатем удалите его, прежде чем продолжить?
Я пробовал что-то вроде этого:
if(exists("global_obj")){ rm("global_obj"); print("global_obj removed") }
И:
if(exists("global_obj")){ rm(global_obj); print("global_obj removed") }
Но получите сообщения об ошибках:
[1] "global_obj removed"
Warning message:
In rm("global_obj") : object 'global_obj' not found
И:
[1] "global_obj removed"
Warning message:
In rm(global_obj) : object 'global_obj' not found
Несмотря на «сообщение об успешном завершении», из сообщения об ошибке следует, что global_obj
никогда не удалялось, поскольку его не удалось найти.
В некоторых ответах предлагалосьrm()
указывает на глобальную среду, что имеет смысл, но это все равно приводит к тому же результату.
Наконец, я знаю, что global_obj
будет заменяться каждый раз, когда я запускаю my_function()
, но естьважная причина, почему я хочу удалить яt каждый раз: это предотвращает любые случаи, когда функция могла завершиться неправильно, но без какого-либо предупреждения .
Таким образом, это заставило бы меня поверить, что global_obj
, который существуетв моей глобальной среде это один из самых последних вызовов my_function()
, когда на самом деле global_obj
, который я вижу, мог существовать при предыдущем его выполнении.
Я хочу быть уверен, чтоglobal_obj
, который я вижу в своей глобальной среде, является самым последним.Если функция не работает, я ожидаю, что моя среда будет пустой.