is.null в списках против других объектов - PullRequest
1 голос
/ 30 апреля 2020

Рассмотрим следующий сценарий:

demo <- list()
is.null(demo$first)
is.null(undefined_object)

Первый сценарий возвращает TRUE как элемент NULL списка. Почему undefined_object не возвращает NULL, поскольку это не объект в глобальной среде?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

demo$first вызывает функцию $, и эта функция возвращает NULL, если правый аргумент не найден.

undefined_object не является вызовом функции, это просто имя объект, но этот объект не существует.

Если вы просто напечатаете два выражения, вы увидите, что они разные:

> demo$first
NULL
> undefined_object
Error: object 'undefined_object' not found

Поэтому, когда вы поместите их в is.null() звоните, вы получите разные результаты, как вы видели.

1 голос
/ 30 апреля 2020

Если нам нужен аналогичный параметр TRUE, один из вариантов - сослаться на этот объект с .GlobalEnv и проверить, является ли он NULL

is.null(.GlobalEnv$undefined_object)
#[1] TRUE

на примере OP, мы проверяем, является ли 'first' - это NULL в среде уже созданного демо-объекта, но undefined_object не создан, и поэтому мы можем проверить его в контексте с глобальной средой

is.null(demo$first)
#[1] TRUE
is.null(.GlobalEnv$demo$first)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...