Ответ 1
Краткая версия:
Используйте inherits
, но будьте осторожны с числами и классами S4.
Более длинная версия:
В разделе "См. также" на странице справки is
:
наследования почти всегда эквивалентны, как для S4, так и для не-S4 объектов, и несколько быстрее. Неэквивалентность применяется к классы, имеющие условные суперклассы, с нетривиальным критерием = в отношении (не распространены и не поощряются): для них - тесты для отношение, но наследует по определению, игнорирует условные наследование для объектов S4.
В разделе "Формальные классы" справочной страницы inherits
:
Аналог наследований для формальных классов есть. Две функции вести себя с одним исключением: классы S4 могут иметь условное наследование, с явным тестом. В этом случае проверьте условие, но наследует игнорирует все условные суперклассы.
Таким образом, они в основном возвращают одно и то же, но inherits
работает быстрее, поэтому в большинстве случаев это должен быть выбор по умолчанию. (Как упоминалось Конрадом, is
также требует, чтобы пакет methods
был загружен, что может сделать его непригодным для использования с учетом производительности Rscript
.)
Значения могут отличаться, если вы используете классы S4 с условным наследованием, но это не рекомендуется (см. "Выбор метода и отправка: подробности" ), что означает, что он, надеюсь, редок.
Самое очевидное место, где две функции отличаются, - это проверять, являются ли целые числа числами.
class(1L)
## [1] "integer"
is.numeric(1L)
## [1] TRUE
is(1L, "numeric")
## [1] TRUE
inherits(1L, "numeric")
## [1] FALSE