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里更一 ...
随机推荐
- mysql优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- /etc/redhat-release
该文件用于记录 RedHat 的发行版本信息 [root@localhost ~]$ cat /etc/redhat-release CentOS release 6.5 (Final)
- C++异常 异常机制
C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应.异常提供了将控制权从程序的一个部分传递到另一部分的途径.对异常的处理有3个组成部分:* 引发异常:* 使用处理程序捕获异常:* 使用 ...
- EL表达式格式化日期时间
1.首先引入标签库 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...
- WPS Word查询某些内容的出现次数
1.CTRL+F 打开查找窗体
- c++11实现l延迟调用(惰性求值)
惰性求值 惰性求值一般用于函数式编程语言中,在使用延迟求值的时候,表达式不在它被绑定到变量之后就立即求值,而是在后面的某个时候求值. 可以利用c++11中的std::function, lam ...
- 原创Java多线程详解(一)
只看书不实践是不行的.来实践一下~~~~~~(引用请指明来源) 先看看百科对多线程的介绍 多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的 ...
- maven安装和与IDE集成
第一部分:maven的基本信息和安装,配置 maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.scms.发布.分发的方法.可以方便的编译代码.进行依赖管理.管理二进制库等 ...
- iOS UITextField输入后隐藏键盘
1.首先在Interface Builder中选择TextFields,然后在Text Field Attributes中找到Text Input Traits,选择Return Key为done. ...
- 从SVN一键对比版本
公司的部署程序太多,每次部署安装完后,还得从SVN上对比版本,手工做实在太麻烦. 比如下面的一个版本 思路: 将需要检查的部件及安装的位置.SVN相关信息写入配置文件,然后程序读取配置文件 配置文件内 ...