R:S3类泛型函数

来源:互联网 发布:淘宝运费险怎么退订 编辑:程序博客网 时间:2024/04/29 15:40

R:S3类泛型函数

(本文参考R语言编程艺术,例子也是该书上的)

R中原始的类结构,就是S3类。其实,R中大多数内置类都是S3类。一个S3类包含一个 列表,再附加一个类名属性和调度的功能。说白了,就是R具有多态性,同一个函数针对不同的函数类型,可以调动不同的操作。也就是不同的类使用统一的接口。常用的泛型函数有plot()、print()等。现以print()来说明:

print

function (x, ...) UseMethod("print")<bytecode: 0x0000000007278520><environment: namespace:base>

你会发现print()函数仅仅由一个UseMethod()的调用构成,实际上,这只是一个调用函数,因此,将print()视为一个泛型型函数,也就无可或非啦。


编写S3类

可以赋予一个S3类不同的输出类型,如下代码


> j<-list(name="Joe",salary=55000,union=T)> j$name[1] "Joe"$salary[1] 55000$union[1] TRUE> class(j)[1] "list"> class(j)<-"employee"> attributes(j)$names[1] "name"   "salary" "union" $class[1] "employee"> #现在编写自己的函数> print.employee<-function(wrkr){+     cat(wrkr$name,"\n")+     cat("salary",wrkr$salary,"\n")+     +     cat("union member",wrkr$union,"\n")+ }> methods(,"employee")       #检查一下类型[1] print.employee> jJoe salary 55000 union member TRUE


0 0