Существует ряд тестов, которые применительно к объекту данного класса выдают информацию об этом объекте. Рассмотрим объекты класса «функция». Функции is.primitive()
или is.closure()
, или (от rlang) is_primitive_eager()
или is_primitive_lazy()
предоставляют информацию о функциональном объекте. Однако использование methods(class = "function"
) (с загруженным rlang) не возвращает ни одну из следующих функций:
[1] as.data.frame as.list coerce coerce<- fortify head latex plot print tail
.
Использование extends(class1 = "function", maybe = TRUE, fullInfo = TRUE)
показывает два суперкласса: «OptionalFunction» и «Возможный метод».
Использование completeClassDefinition(Class = "function", doExtends=TRUE)
обеспечивает 23 подкласса. Тем не менее, мне кажется (хотя я не уверен в этом), что все или почти все супер- и подклассы из этих двух функций относятся к классам S4, которые я обычно не использую. Одним из этих подклассов является «genericFunction», поэтому я попытался применить его к базовой функции R, которая, как я знал, является универсальной. Хотя is(object=plot, class2 = "genericFunction")
возвращает TRUE и plot()
предшествует классам S4, в базе R нет теста "is.generic", но в пакете методов есть тест "isGeneric", который подсказывает мне, что plot()
имеет был переписан как объект S4.
В любом случае, существует множество очевидных потенциальных свойств функций, например, являются ли они общими, для которых нет is.<whatever>
тестов, которые я могу найти, и я хотел бы знать, есть ли другие способы, которыми я можете искать их, например, в пакетах.
Более общий способ задать тот же вопрос - есть ли способ идентификации функций, которые будут принимать объекты указанного класса и не возвращать ошибку или бессмыслицу. Если это так, я мог бы взять список функций в рекомендованных пакетах или в некотором указанном пакете и проверить, возвращает ли каждая из них разумный ответ при передаче функции. Это не совсем ответ - такой метод, например, вернул бы TRUE для quote () - но по крайней мере уменьшил бы проблему до размера.