Как я могу проверить, существует ли объект в глобальной среде, а затем удалить его из функции? - PullRequest
0 голосов
/ 04 октября 2018

Есть некоторые похожие вопросы к этому, но предоставленные ответы приспособлены к тем вопросам, в которых приведенные примеры намного сложнее, чем в моем сценарии.

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

1 Ответ

0 голосов
/ 05 октября 2018

Я понял, в чем проблема - мне нужно было указать rm() на глобальную среду:

if(exists("global_obj")) rm("global_obj", envir = globalenv())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...