Скрытие вывода от векторизованной функции - PullRequest
1 голос
/ 02 апреля 2019

Фон

В этом примере я хотел бы запустить 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

Я хотел бы скрыть это, что я безуспешно пытался с invisiblecall.

Требуемый вывод

Ничего не отображается

>> 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

1 Ответ

2 голосов
/ 02 апреля 2019

В вашем конкретном примере вы можете вызвать rm с вектором:

vf_rem = function (objects) rm(list = objects)

В общем, следующее должно помочь:

vf_fun = function (objects) invisible(Vectorize(fun)(objects))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...