R语言编程
R中的帮助文档非常有用,其中有四种类型的帮助
- help(functionname) 对已经加载包所含的函数显示其帮助文档,用?号也是一样的。
- help.search('keyword') 对已经安装的包搜索关键词,用??号功能一样。
- help(package='packagename') 显示已经安装的包的描述和函数说明
- RSiteSearch('keyword') 在官方网站上联网搜索
R语言的启动
- R语言启动后会首先查找有无.Rprofile文档,用户可通过编辑.Rprofile文档来自定义R启动环境,该文件可放在工作目录或安装目录中。
- 之后R会查找在工作目录有无.RData文档,若有的话将自动加载恢复之前的工作内容。
- 在R中所有的默认输入输出文件都会在工作目录中。getwd() 报告工作目录,setwd() 负责设置工作目录。在win窗口下也可以点击Change Working Directory来更改。
- Sys.getenv('R_HOME') 会报告R主程序安装目录
- ?Startup可以得到更多关于R启动时的帮助
II. 对象和类
R是一种基于对象(Object)的语言,所以你在R语言中接触到的每样东西都是一个对象,一串数值向量是一个对象,一个函数是一个对象,一个图形也是一个对象。基于对象的编程(OOP)就是在定义类的基础上,创建与操作对象。
对象中包含了我们需要的数据,同时对象也具有很多属性(Attribute)。其中一种重要的属性就是它的类(Class),R语言中最为基本的类包括了数值(numeric)、逻辑(logical)、字符(character)、列表(list),在此基础上构成了一些复合型的类,包括矩阵(matrix)、数组(array)、因子(factor)、数据框(dataframe)。除了这些内置的类外还有很多其它的,用户还可以自定义新的类,但所有的类都是建立在这些基本的类之上的。
我们下面来用一个简单线性回归的例子来了解一下对象和类的处理。
# 创建两个数值向量
x <- runif(100)
y <- rnorm(100)+5*x
# 用线性回归创建模型,存入对象model
model <- 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对象。
好了,我们已经知道了model的底细了,你还想知道x的信息吧。如果运行attributes(x),会发现返回了空值。这是因为x是一个向量,对于向量这种内置的基本类,attributes是没有什么好显示的。此时你可以运行mode(x),可观察到向量的类是数值型。如果运行mode(model)会有什么反应呢?它会显示lm类的基本构成是由list组成的。当然要了解对象的类,也可以直接用class(),如果要消除对象的类则可用unclass()。
从上面的结果我们还看到names这个属性,这如同你到一家餐厅问服务生要一份菜单,输入names(model)就相当于问model这个对象:Hi, 你能提供什么好东西吗?如果你熟悉回归理论的话,就可以从names里头看到它提供了丰富的回归结果,包括回归系数(coefficients)、残差 (residuals)等等,调用这些信息可以就象处理普通的数据框一样使用$符号,例如输出残差可以用model$residuals。当然用泛型函数 可以达到同样的效果,如residuals(model),但在个别情况下,这二者结果是有少许差别的。
我们已经知道了attributes的威力了,那么另外一个非常有用的函数是str(),它能以简洁的方式显示对象的数据结构及其内容,试试看,非常有用的。
V. 向量化运算
和matlab一样,R语言以向量为基本运算对象。也就是说,当输入的对象为向量时,对其中的每个元素分别进行处理,然后以向量的形式输出。R语言 中基本上所有的数据运算均能允许向量操作。不仅如此,R还包含了许多高效的向量运算函数,这也是它不同于其它软件的一个显著特征。向量化运算的好处在于避 免使用循环,使代码更为简洁、高效和易于理解。本文来对apply族函数作一个简单的归纳,以便于大家理解其中的区别所在。
所谓apply族函数包括了apply,sapply,lappy,tapply等函数,这些函数在不同的情况下能高效的完成复杂的数据处理任务,但角色定位又有所不同。
apply()函数的处理对象是矩阵或数组,它逐行或逐列的处理数据,其输出的结果将是一个向量或是矩阵。下面的例子即对一个随机矩阵求每一行的均值。要注意的是apply与其它函数不同,它并不能明显改善计算效率,因为它本身内置为循环运算。
m.data <- matrix(rnorm(100),ncol=10)
apply(m.data,1,mean)
lappy()的处理对象是向量、列表或其它对象,它将向量中的每个元素作为参数,输入到处理函数中,最后生成结果的格式为列表。在R中数据框是一种特殊的列表,所以数据框的列也将作为函数的处理对象。下面的例子即对一个数据框按列来计算中位数与标准差。
f.data <- data.frame(x=rnorm(10),y=runif(10))
lapply(f.data,FUN=function(x) list(median=median(x),sd=sd(x))
。。。
http://www.plob.org/2012/09/21/3574.html
R语言编程的更多相关文章
- R语言编程艺术(5)R语言编程进阶
本文对应<R语言编程艺术> 第14章:性能提升:速度和内存: 第15章:R与其他语言的接口: 第16章:R语言并行计算 ================================== ...
- R语言编程艺术(4)R对数据、文件、字符串以及图形的处理
本文对应<R语言编程艺术> 第8章:数学运算与模拟: 第10章:输入与输出: 第11章:字符串操作: 第12章:绘图 =================================== ...
- R语言编程艺术(3)R语言编程基础
本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...
- R语言编程艺术(2)R中的数据结构
本文对应<R语言编程艺术>第2章:向量:第3章:矩阵和数组:第4章:列表:第5章:数据框:第6章:因子和表 ======================================== ...
- R语言编程艺术(1)快速入门
这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是“程序”,因此,希望通过学习这本书,能提高编程 ...
- R语言编程中的常见错误
R语言编程中的常见错误有一些错误是R的初学者和经验丰富的R程序员都可能常犯的.如果程序出错了,请检查以下几方面. 使用了错误的大小写.help().Help()和HELP()是三个不同的函数(只有第 ...
- <R语言编程艺术>的一个错误以及矩阵相加
R语言编程艺术讲矩阵这节时,举了个随机噪声模糊罗斯福总统画像的例子.但是里面似乎有个错误,例子本意是区域外的值保持不变,而选定区域的值加一个随机值,但是实际情况是两个行列不相等的矩阵相加,会报错,如果 ...
- R语言编程艺术# 矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
- R语言编程艺术#02#矩阵(matrix)和数组(array)
矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数.所以矩阵也是和向量一样,有模式(数据类型)的概念.(但反过来,向量却不能看作是只有一列或一行的矩阵. 数组(array)是R里更一 ...
随机推荐
- css两列等高布局
布局方案 等高布局有几种不同的方法,但目前为止我认为浏览器兼容最好最简便的应该是padding补偿法.首先把列的padding-bottom设为一个足够大的值,再把列的margin-bottom设一个 ...
- Java 应用程序设计规范
1.能在程序中取的产生就从程序中取.不用客户输入(减少客户输入). 比如客户号 信息 等. 2.如果有参数输入尽可能减少参数输入的个数(4个->0个): 3.验证入参(尽可能的实现输入参数的正确 ...
- 如何使用CodeSmith批量生成代码(原创系列教程)
在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做 ...
- JBPM4.4_核心概念与相关API
1. 核心概念与相关API(Service API) 1.1. 概念:Process definition, process instance , execution 1.1.1. Process ...
- 浅谈ITIL
本节内容 浅谈ITIL CMDB介绍 Django自定义用户认证 Restful 规范 资产管理功能开发 浅谈ITIL TIL即IT基础架构库(Information Technology Infra ...
- UIGestureRecognizer学习笔记2
The concrete subclasses of UIGestureRecognizer are the following: UITapGestureRecognizer UIPinchGest ...
- checkbox多选框选择判断
全选<input type="checkbox" name="select" id="select" value="chec ...
- 测试sql语句性能,提高执行效率
为了让您的程序执行的效率更高,SQL的效率一定不可忽视. 现有以下方法去检测SQL的执行效率. 对于多表查询的效率测试: )直接from ,where方式. SET STATISTICS io ON ...
- django 自定模板标签的注册
首先注册方法一般都是先实例化一个template.Library.如: from django import template register = template.Library() 1.注册自定 ...
- LeetCode——Rectangle Area
Description:https://leetcode.com/problems/rectangle-area/ public class Solution { public int compute ...