R是一种基于对象(Object)的语言,因此你在R语言中接触到的每样东西都是一个对象,一串数值向量是一个对象,一个函数是一个对象,一个图形也是一个对象。基于对象的编程(OOP)就是在定义类的基础上,建立与操做对象。php
对象中包含了咱们须要的数据,同时对象也具备不少属性(Attribute)。其中一种重要的属性就是它的类(Class),R语言中最为基本的类包括了数值(numeric)、逻辑(logical)、字符(character)、列表(list),在此基础上构成了一些复合型的类,包括矩阵(matrix)、数组(array)、因子(factor)、数据框(dataframe)。除了这些内置的类外还有不少其它的,用户还能够自定义新的类,但全部的类都是创建在这些基本的类之上的。编程
咱们下面来用一个简单线性回归的例子来了解一下对象和类的处理。
# 建立两个数值向量x <- runif(100) y <- rnorm(100)+5*x# 用线性回归建立模型,存入对象modelmodel <- lm(y~x)数组
好了,如今咱们手头上有一个不熟悉的对象model,那么首先来看看它里面藏着什么好东西。最有用的函数命令就是attributes(model),用来提取对象的各类属性,结果以下:数据结构
> attributes(model)
names[1]"coefficients" "residuals" "effects" [4]"rank" "fitted.values""assign" [7]"qr" "df.residual" "xlevels" [10]"call" "terms" "model" class
[1] "lm"函数
能够看到这个对象的类是“lm”,这意味着什么呢?咱们知道对于不一样的类有不一样的处理方法,那么对于modle这个对象,就有专门用来处理lm类对象的函数,例如plot.lm()。但若是你用普通的函数plot()也同样能显示其图形,Why?由于plot()这种函数会自动识别对象的类,从而选择合适的函数来对付它,这种函数就称为泛型函数(generic function)。你能够用methods(class=lm)来了解有哪些函数可适用于lm对象。orm
好了,咱们已经知道了model的底细了,你还想知道x的信息吧。若是运行attributes(x),会发现返回了空值。这是由于x是一个向量,对于向量这种内置的基本类,attributes是没有什么好显示的。此时你能够运行mode(x),可观察到向量的类是数值型。若是运行mode(model)会有什么反应呢?它会显示lm类的基本构成是由list组成的。固然要了解对象的类,也能够直接用class(),若是要消除对象的类则可用unclass()。对象
从上面的结果咱们还看到names这个属性,这如同你到一家餐厅问服务生要一份菜单,输入names(model)就至关于问model这个对象:Hi,你能提供什么好东西吗?若是你熟悉回归理论的话,就能够从names里头看到它提供了丰富的回归结果,包括回归系数(coefficients)、残差(residuals)等等,调用这些信息能够就象处理普通的数据框同样使用符号,例如输出残差能够用modelresiduals。固然用泛型函数能够达到一样的效果,如residuals(model),但在个别状况下,这两者结果是有少量差异的。ci
咱们已经知道了attributes的威力了,那么另一个很是有用的函数是str(),它能以简洁的方式显示对象的数据结构及其内容,试试看,很是有用的。get
本文来自: 人大经济论坛 S-Plus&R专版 版,详细出处参考: http://bbs.pinggu.org/forum.php?mod=viewthread&tid=1363234&page=1it