Я хотел бы проверить, если некоторая переменная определена в R - без получения ошибки. Как я могу это сделать?
Мои попытки (безуспешно):
> is.na(ooxx)
Error: object 'ooxx' not found
> is.finite(ooxx)
Error: object 'ooxx' not found
Спасибо!
Вы хотите exists()
:
R> exists("somethingUnknown")
[1] FALSE
R> somethingUnknown <- 42
R> exists("somethingUnknown")
[1] TRUE
R>
Смотрите
?exists
, для некоторого определения "... определяется". Напримеристочник
если вы находитесь внутри функции, то вы пропускаете ().
источник
missing
однако работает только для аргументов функции. Вы не можете сделать,foo <- function(x) {missing(x); missing(y)}
или вы получитеfoo(1)
> Error in missing(y) : 'missing' can only be used for arguments
.Как уже отмечали другие, вы ищете
exists
. Имейте в виду, что использованиеexists
с именами, используемыми базовыми пакетами R, вернет true независимо от того, определили ли вы переменную:Чтобы обойти это (как указал Bazz; см.
?exists
), Используйтеinherits
аргумент:Конечно, если вы хотите выполнить поиск в пространствах имен прикрепленных пакетов, это также может не сработать:
Единственное, что я могу придумать, чтобы обойти это - поиск в прикрепленных пакетах, но не в базовых пакетах, - это следующее:
Сравните замену
_object_name_
с"data.table"
(TRUE
) против"var"
(FALSE
)(конечно, если вы не используете RStudio, я думаю, что первое автоматически подключенное окружение - это
"package:stats"
)источник
inherits = FALSE
кажется, изолирует вещи в глобальной среде. Это звучит правильно?Если вы не хотите использовать кавычки, вы можете использовать
deparse(substitute())
трюк, который я нашел в разделе примеров?substitute
:источник
force
или оценить это в функции, как это:is.defined <- function(sym) class(try(sym, TRUE))!='try-error'
Могут быть ситуации, в которых вы точно не знаете имя переменной, которую вы ищете, например, когда массив результатов был создан системой массового обслуживания. Возможно, к ним можно обратиться с помощью «ls» и его аргумента «pattern», который ожидает регулярное выражение.
Функция «существует» может быть переопределена таким образом, как
При подготовке этого ответа я был немного удивлен необходимостью спецификации среды при вызове ls () из функции. Итак, спасибо вам за это, stackoverflow! Есть также атрибут "all.names", который я должен был установить в true, но пропустить.
источник