有许多测试应用于给定类的对象,产生有关该对象的信息。考虑类“函数”的对象。函数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”和“PossibleMethod”。
使用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>
个测试,我想知道是否有其他的我可以搜索它们的方式,例如,在包中。
提出同样问题的一种更通用的方法是,是否有任何方法可以识别接受指定类的对象而不返回错误或无意义的函数。如果是这样的话,我可以在reccomended包中或在一些指定的包中列出函数列表,并测试每个函数在递交函数时是否返回合理的响应。这不是一个答案 - 例如,这样的方法会为quote()返回TRUE,但它至少会将问题缩小到适当的大小。