В чем разница между идентичным (x, y) и isTRUE (all.equal (x, y))? - PullRequest
27 голосов
/ 03 августа 2010

Есть ли разница между тестированием isTRUE(all.equal(x, y)) и identical(x, y)?

На странице справки написано:

Не используйте 'all.equal' непосредственно в ', если'выражения-либо использовать' isTRUE (all.equal (....)) 'или "идентичные", если это уместно.

, но это "если уместно" вызывает у меня сомнения.Как мне решить, какой из двух подходит?

Ответы [ 3 ]

26 голосов
/ 03 августа 2010

all.equal проверяет на близкое равенство, в то время как identical является более точным (например, он не допускает различий и сравнивает тип хранения). Из? Одинаковых:

Функция «all.equal» также иногда используется для проверки равенства это Кстати, но был предназначен для чего-то отличается: это позволяет для небольших различия в числовых результатах.

И одна из причин, по которой вы бы обернули all.equal в isTRUE, заключается в том, что all.equal будет сообщать различия, а не просто вернет FALSE.

13 голосов
/ 03 августа 2010

identical суетливее. Например:

> identical(as.double(8), as.integer(8))
[1] FALSE
> all.equal(as.double(8), as.integer(8))
[1] TRUE
> as.double(8) == as.integer(8)
[1] TRUE
10 голосов
/ 12 октября 2015

Помимо различий в числовом допуске и сравнении режима хранения, в отличие от all.equal(), identical также проверяет равенство связанных сред.Обычные объекты в R обычно не имеют связанных сред - они чаще всего связаны с объектами function и formulaterms).Но чтобы проиллюстрировать это, я приведу два тривиальных объекта различных (вновь созданных) сред:

x <- 2; environment(x) <- new.env()
y <- 2; environment(y) <- new.env()
all.equal(x,y)   ## TRUE
identical(x,y)   ## FALSE

Существует аргумент ignore.environment:

ignore.environment: логическое указаниеесли их окружение следует игнорировать при сравнении замыканий.

, но поскольку оно применяется только при сравнении замыканий (т. е. функций), в этом случае это не имеет значения, равно как и не будетпри сравнении формул или терминов объектов.

...