2010-08-03 7 views
22

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

помощь страница говорит:

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

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

ответ

20

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

Функции «all.equal» также иногда используется для проверки РАВЕНСТВА этого пути, но был предназначен для чего-то разные: это позволяет для небольших различий в числовых результатах.

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

+2

спасибо, «нет толерантности» не является ключевым: 'all.equal (8,0, 9,0, допуск = 1,0)' – mariotomo

+0

Другим примером является то, что 'идентичны()' будут говорить Интс и тоскует различны, даже если у них есть одинаковое значение, тогда как 'all.equal()' будет говорить, что они равны. – smci

12

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 
8

В дополнение к различиям в численном толерантности и сравнения режима хранения, в отличие от 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: логический, указывающий, если их окружение должны быть проигнорированы, когда сравнение закрытий.

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

 Смежные вопросы

  • Нет связанных вопросов^_^