长度(类)> 1的对象的方法

时间:2017-08-20 21:04:21

标签: r methods

This question建议使用methods(class=class(obj))来提取对象可用的方法列表。

如果在length(class(obj))>1的对象上使用,则会导致许多警告,例如

set.seed(101)
a <- matrix(rnorm(20), nrow = 10)
b <- a + rnorm(length(a))
obj <- lm(b ~ a)

class(obj)作为c("lm","mlm"); methods(class=class(obj))给出了

  

多次)&lt; grep中的警告(pattern,all.names,value = TRUE):     参数'pattern'的长度为&gt; 1,仅使用第一个元素   gsub中的警告(名称,“”,S3reg):     参数'pattern'的长度为&gt; 1,仅使用第一个元素   sub(paste0(“\。”,class,“$”),“”,row.names(info))中的警告:     参数'pattern'的长度为&gt; 1,只使用第一个元素

然后是结果。

似乎(?)将methods(class=...)应用于class(obj) last 元素会起作用,但我对其替代方案或讨论感兴趣(或者不是)正确...

为了澄清,我希望返回的值是一个(最好是唯一的)字符向量,这样我就可以使用类似if ("foo" %in% allmethods(obj))的东西来测试对象的指定方法的可用性...... / p>

1 个答案:

答案 0 :(得分:2)

这是你正在寻找的吗?

sapply(class(obj), function(x) methods(class = x))

请注意,下面的代码会出错,因为参数generic.function变为mlm。它必须是如上所述的class参数。

sapply(class(obj), methods)
Error in .S3methods(generic.function, class, parent.frame()) : 
  no function 'mlm' is visible