Объектно-ориентированная система R S3 сосредоточена вокруг универсальных функций, которые вызывают методы в зависимости от класса объекта, для которого вызывается универсальная функция. Суть в том, что универсальная функция вызывает соответствующий метод, в отличие от других языков программирования OO, в которых метод определяется внутри класса.
Например, функция 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
будет методом для объекта list
из универсальной функции as
). Пожалуйста помоги.
?as
,The S3 functions listed are those which are named like methods and may not actually be methods (known exceptions are discarded in the code).
Если вы посмотрите на источник дляas
, он не похож на универсальный S3 (какmean
) только с вызовомUseMethod
, что подкрепляет утверждение, что это не универсальный. Однако это только часть истории; здесь определенно есть что рассказать. - person alistaire   schedule 14.01.2018?methods
, а не?as
. - person alistaire   schedule 14.01.2018