Как уже отмечали другие, вы ищете exists
.Имейте в виду, что использование exists
с именами, используемыми базовыми пакетами R, вернет true независимо от того, определили ли вы переменную:
> exists("data")
[1] TRUE
Чтобы обойти это (как указал Bazz; см. ?exists
), используйте аргумент inherits
:
> exists("data", inherits = FALSE)
[1] FALSE
foo <- TRUE
> exists("foo", inherits = FALSE)
[1] TRUE
Конечно, если вы хотите выполнить поиск в пространствах имен вложенных пакетов, это также может не сработать:
> exists("data.table")
[1] FALSE
require(data.table)
> exists("data.table", inherits = FALSE)
[1] FALSE
> exists("data.table")
[1] TRUE
ЕдинственноеЯ могу придумать, как обойти это - искать в прикрепленных пакетах, но , а не в базовых пакетах, - это следующее:
any(sapply(1:(which(search() == "tools:rstudio") - 1L),
function(pp) exists(_object_name_, where = pp, inherits = FALSE)))
Сравнить замену _object_name_
на "data.table"
(TRUE
) против "var"
(FALSE
)
(конечно, если вы не используете RStudio, я думаю, что первое автоматически подключаемое окружение - "package:stats"
)