如果函数接收任意对象x作为参数,测试是否x支持某种方法的最佳方法是什么foo?
(我认为,作为最后的手段,该函数总是可以尝试在具有合适处理程序的foo(x)a 内进行评估tryCatch,但我发现,至少在某些情况下,即使不支持foo(x)也不会产生错误;相反,它只会return 。因此,不能依赖捕获异常作为对 的支持的合适测试。)xfooNULLxfoo
我想这个问题的答案将取决于 的x“对象风味”(S3、S4或其他)。请在您的回答中考虑所有此类可能性。
有几种方法可以解决这个问题。
通过以下方式查找可用方法:
methods(class = class(x))
Run Code Online (Sandbox Code Playgroud)
测试foo的类是否存在方法x:
"foo" %in% methods(class = class(x))
Run Code Online (Sandbox Code Playgroud)
如果您的方法不是由包导出的(并且只能通过package:::foo.bar(x)wherebar的类访问x),则它们不会在上面的示例中显示。