R的S3 OO系统是围绕着通用函数展开的,这些函数根据调用它们的对象的类别来调用方法。关键在于通用函数调用适当的方法,而不是在类中定义方法,这与其他面向对象编程语言不同。
例如,`mean`函数是一个通用函数。
在最后,有一个警告提示说
例如,`mean`函数是一个通用函数。
isGeneric("mean")
methods(mean)
这将会打印出来
TRUE
[1] mean,ANY-method mean.Date mean.default mean.difftime
[5] mean.IDate* mean,Matrix-method mean.POSIXct mean.POSIXlt
[9] mean,sparseMatrix-method mean,sparseVector-method
see '?methods' for accessing help and source code
我在探索R语言时发现了as
函数。但是我对于R声称该函数不是通用函数,却仍然有方法感到困惑。
isGeneric("as")
methods(as)
TRUE
[1] as.AAbin as.AAbin.character
[3] as.alignment as.allPerms
[5] as.array as.array.default
[7] as.binary as.bitsplits
[9] as.bitsplits.prop.part as.call
...
在最后,有一个警告提示说
as
不是通用的。 Warning message:
In .S3methods(generic.function, class, parent.frame()) :
function 'as' appears not to be S3 generic; found functions that look like S3 methods
有人能解释一下 as
函数是什么,以及它与 as.list
、as.data.frame
等的关系吗?R 说 as.list
是一个通用函数(我对 R 中的不一致性感到有点生气,因为我本来希望 as.list
是从 as
通用函数中针对 list
对象的方法)。请帮忙。
?as
,列出的S3函数是那些像方法命名的函数,但实际上可能并不是方法(已知的例外在代码中被丢弃)。如果您查看as
的源代码,它看起来不像一个只有UseMethod
调用的S3通用函数(如mean
),这加强了它不是通用函数的说法。然而,这只是故事的一部分;这里肯定还有更多的内容需要讲述。 - alistaire?methods
,而不是?as
。 - alistaire