Фон
В этом примере я хотел бы запустить rm
только для объектов, которые находятся в предоставленной среде.
Аналогичные результаты могут быть получены с помощью suppressWarnings
но я хочу использовать Vectorize.
Пример
# Create two objects to delete
a <- 1
c <- 2
# b doesn't exist
Vectorize(
FUN = function(object) {
invisible(rm(object))
},
vectorize.args = "object"
) -> vf_rem
# Run function only on existing objects
vf_rem(object = Filter(f = exists, x = c("a", "b", "c")))
Функция корректно удаляет a
и c
и не выдает предупреждение при обнаружении имени пропавшего объекта "b"
.
Проблема
vf_rem
по-прежнему выводит объект на консоль:
>> vf_rem(object = Filter(f = exists, x = c("a", "b", "c")))
$a
NULL
$c
NULL
Я хотел бы скрыть это, что я безуспешно пытался с invisible
call.
Требуемый вывод
Ничего не отображается
>> vf_rem(object = Filter(f = exists, x = c("a", "b", "c")))
>> # Combing back to prompt, nothing is printed
>> # .Last.values contains lst_res from lines below
Для объекта, как для любой другой функции
>> vf_rem(object = Filter(f = exists, x = c("a", "b", "c"))) -> lst_res
>> lst_res
# Shows list
>> $a
NULL
$c
NULL