R学习笔记(1):R是什么

本文最新版已更新至http://thinkinside.tk/2013/05/03/r_notes_1_what.html 

63861f069721d85604486f6eb5f1c0c6Ab61fe310a4a1c66d210d7e8c0aaad13

 

在学习量化投资的时候,我发现了R(www.r-project.org)。R到底是什么呢?在开始之前,先看看R的神奇之处。

1. R初窥

从CRAN(The Comprehensive R Archive Network)cran.r-project.org—mirrors.html中选择一个镜像,然后下载合适的安装包(R支持Linux、Mac OS X和Windows)。
安装并运行R后,可以看到R的控制台(我的操作系统是Mac OS):

Start

 
在R的控制台输入如下命令: 
> install.packages('quantmod') # 安装quantmod包
> require(quantmod) #引用quantmod包
> getSymbols("GOOG",src="yahoo",from="2013-01-01", to='2013-04-24') #从雅虎财经获取google的股票数据
> chartSeries(GOOG,up.col='red',dn.col='green')  #显示K线图
> addMACD() #增加MACD图
 
就能够看到下图的效果了:
 

First

最后,退出R:
> q()#Terminate an R Session
 

2. R是什么

是不是很神奇?反正当时我完全被Hold住了。
那么R到底是什么?或者说,R到底是做什么用的?从不同的角度出发,对R会有不同的描述。 
  • 从使用角度,R是一个有着统计分析功能及强大作图功能的软件,在GNU协议General Public Licence4下免费发行。
  • 从编程角度,R语言是面向对象的统计编程语言,是由AT&T贝尔实验室所创的S语言发展出的一种方言。
  • 从计算角度,R 是一种为统计计算和图形显示而设计的语言及环境。
  • 从开发角度,R 是一组开源的数据操作,计算和图形显示工具的整合包有各种方式可以进行编程调用。
  • 从架构角度,R 是为统计计算和图形展示而设计的一个系统。它包括一种编程语言,高级别图形展示函数,和其它语言的接口以及调试工具。
如果一定要找到一个与R类似的软件,那就是商业软件Matlab。R和Matlab都是基于编程进行数据分析的工具,Matlab适用的领域更广,而R更擅长统计分析领域。
 
与Matlab相比,R更具备开放性:
  • R是自由软件,Matlab是商业软件;
  • R可以方便的通过“包”进行扩展,R的核心只有25个包,但是有几千个外部包可以调用,当然你也可以开发自己的;
  • R语言比Matlab的要强大;
  • R和其他编程语言/数据库之间有很好的接口;其他语言也可以很方便的调用R的API和结果对象。
 
R常用于金融和统计领域。大多数人使用R就是因为它的统计功能,R的内部实现了很多经典的or时髦的统计技术。
 

02e60a9c4fdeb7bd16cdb516d5c6656b

 
 
 

3. R的核心概念

3.1 对象

R语言是一种面向对象的语言,所有的对象都有两个内在属性:元素类型和长度。 
元素类型是对象内元素的基本类型,包括:数值(numeric),字符型(character),复数型(complex)、逻辑型(logical)、函数(function)等,通过mode()函数可以查看一个对象的类型。
长度是对象中元素的数目,通过函数length()可以查看对象的长度。
除了元素类型外,对象本身也有不同的“类型”,表示不同的数据结构(struct)。R中的对象类型主要包括:
向量(vector): 由一系列有序元素构成。
因子(factor):对同长的其他向量元素进行分类(分组)的向量对象。R 同时提供有序(ordered)和无序(unordered)因子。
数组(array):带有多个下标的类型相同的元素的集合
矩阵(matrix):矩阵仅仅是一个双下标的数组。R提供了一下函数专门处理二维数组(矩阵)。
数据框(data frame):和矩阵类似的一种结构。在数据框中,列可以是不同的对象。
时间序列(time series):包含一些额外的属性,如频率和时间.
列表(list):是一种泛化(general form)的向量。它没有要求所有元素是同一类型,许多时候就是向量和列表类型。列表为统计计算的结果返回提供了一种便利的方法。

3.2 常量

R中还定义了一些常量,比如:
NA:表示不可用
Inf: 无穷
-Inf: 负无穷
TRUE:真
FALSE:假
 

4. R的基本使用

4.1 命令

R是一种语法非常简单的表达式语言(expression language)。使用者通过命令(command)与R进行交互。
 
基本命令要么是表达式(expressions)要么就是赋值(assignments)。如果一条命令是表达式,那么它将会被解析(evaluate),并将结果显示在屏幕上,同时清空该命令所占内存。赋值同样会解析表达式并且把值传给变量但结果不会自动显示在屏幕上。
 
基于命令,可以用交互的方式或者批处理/脚本文件的方式使用R。

4.2 交互式使用 R

交互式shell是一种很方便的环境,可以进行各种尝试,随时调整过程。与Python、Ruby等语言一样,R也提供了shell环境。本文开始的例子就是以交互的方式使用R。当打开R控制台时,R会显示命令提示符">",此时可以输入命令。
下面是交互式使用R的几个例子:
 
例一:
> help.start() #启动在线帮助,会打开浏览器。
> x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
> plot(x,y) #使用x,y画二维散点图, 会打开一个图形窗口
> ls() #查看当前工作空间里面的 R 对象
> rm(x,y) #清除x,y对象
>x <- 1:20  # 相当于x=(1,2,…,20)
例二:
x <- 1:20#等价于 x = (1, 2, ..., 20)。 

w <- 1 + sqrt(x)/2#标准差的`权重'向量。 

dummy <- data.frame(x=x, y= x + rnorm(x)*w)#创建一个由x 和 y构成的双列数据框

dummy #查看dummy对象中的数据。 

fm <- lm(y ~ x, data=dummy)#拟合 y 对 x 的简单线性回归

summary(fm)#查看分析结果。 

fm1 <- lm(y ~ x, data=dummy, weight=1/w^2)#加权回归

summary(fm1)#查看分析结果。
attach(dummy)#让数据框中的列项可以像一般的变量那样使用。 

lrf <- lowess(x, y)#做一个非参局部回归。 

plot(x, y)#标准散点图。 

lines(x, lrf$y)#增加局部回归曲线。 

abline(0, 1, lty=3)#真正的回归曲线:(截距 0,斜率 1)。 

abline(coef(fm))#无权重回归曲线。 

abline(coef(fm1), col = "red")#加权回归曲线。 

detach()#将数据框从搜索路径中去除。 

plot(fitted(fm), resid(fm),xlab="Fitted values",ylab="Residuals",main="Residuals vs Fitted")一个检验异方差性(heteroscedasticity)的标准回归诊断图。 qqnorm(resid(fm), main="Residuals Rankit Plot")#用正态分值图检验数据的偏度(skewness),峰度(kurtosis)和异常值(outlier)。

rm(fm, fm1, lrf, x, dummy)#再次清空。

例三: Michaelson 和 Morley 测量光速的经典实验
filepath <- system.file("data", "morley.tab" , package="datasets")#从对象 morley 中得到实验数据的文件路径

filepath#查看文件路径

file.show(filepath)#查看文件内容

mm <- read.table(filepath)#以数据框的形式读取数据

mm$Expt <- factor(mm$Expt)mm$Run <- factor(mm$Run)#将 Expt 和 Run 改为因子。 

attach(mm)#让数据在位置 3 (默认) 可见(即可以直接访问)。 

plot(Expt, Speed, main="Speed of Light Data", xlab="Experiment No.")#用简单的盒状图比较五次实验。 

fm <- aov(Speed ~ Run + Expt, data=mm)#分析随机区组,`runs' 和 `experiments' 作为因子。 

summary(fm)fm0 <- update(fm, . ~ . - Run)anova(fm0, fm)#拟合忽略 `runs' 的子模型,并且对模型更改前后进行方差分析。 

detach()rm(fm, fm0)#在进行下面工作前,清空数据。#下面是等高线和影像显示的示例

x <- seq(-pi, pi, len=50)#x 是一个在区间 [-pi\, pi] 内等间距的50个元素的向量

y <- xf <- outer(x, y, function(x, y) cos(y)/(1 + x^2))#f 是一个方阵,行列分别被 x 和 y 索引,对应的值是函数 cos(y)/(1 + x^2) 的结果。 

oldpar <- par(no.readonly = TRUE)par(pty="s")#保存图形参数,设定图形区域为“正方形”。 

contour(x, y, f)contour(x, y, f, nlevels=15, add=TRUE)#绘制 f 的等高线;增加一些曲线显示细节。 

fa <- (f-t(f))/2#fa 是 f 的“非对称部分”(t() 是转置函数)。 

contour(x, y, fa, nlevels=15)#画等高线

par(oldpar)# 恢复原始的图形参数

image(x, y, f)image(x, y, fa)#绘制一些高密度的影像显示

objects(); rm(x, y, f, fa)#在继续下一步前,清空数据。
th <- seq(-pi, pi, len=100)z <- exp(1i*th)#1i 表示复数 i
par(pty="s")plot(z, type="l")#图形参数是复数时,表示虚部对实部画图。这可能是一个圆。 

w <- rnorm(100) + rnorm(100)*1i#假定我们想在这个圆里面随机抽样。一种方法将让复数的虚部和实部值是标准正态随机数 ... 

w <- ifelse(Mod(w) > 1, 1/w, w)#将圆外的点映射成它们的倒数。 

plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+",xlab="x", ylab="y")lines(z)#所有的点都在圆中,但分布不是均匀的。 #下面采用均匀分布。现在圆盘中的点看上去均匀多了。 

w <- sqrt(runif(100))*exp(2*pi*runif(100)*1i)plot(w, xlim=c(-1,1), ylim=c(-1,1), pch="+", xlab="x", ylab="y")lines(z)rm(th, w, z)#再次清空。 

q()#离开 R 程序

 

 

4.3 工作空间(workspace)

R shell 可以任意地保存一个完整的环境,称为工作空间(workspace)。前面的例子中,运行q()命令退出R时,会被询问是否要保存工作空间:

2013 05 02  9 34 53

 
工作空间(workspace)保存了一些环境信息。每次与R的会话(session)可以从一个全新的环境开始,也可以在原来的基础上继续,这些运行信息就保存在工作空间中。
如果在UNIX系统以命令行的方式启动R,则当前目录就是本次会话的工作空间:
$ mkdir r_test
$ cd r_test/
$ R
看看R能为工作空间保存些什么内容:
> x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
> q()
Save workspace image? [y/n/c]: y
$ ls -Al
会发现R保存了两个隐藏文件:.RData和.Rhistory。其中.RData以二进制的方式保存了会话中的变量值,.Rhistory以文本文件的方式保存了会话中的所有命令。
如果在一个已有的工作空间中启动R,会提示:
[原来保存的工作空间已还原]
此时可以用函数ls()和history()看到之前保存的数据和命令。
使用rm()/remove()可以删除工作空间中的变量。
 
在R控制台,也可以使用函数getwd()和setwd()来获取/设置工作空间目录;使用list.files()查看当前目录下的文件。
 
如果以GUI方式运行R控制台,可以通过菜单来加载或保存工作空间。

4.4 脚本/批处理

前面提到R可以在工作空间中保存历史命令。其实这就是一个工作空间中的默认脚本,当加载工作空间时自动执行。
我们完全可以写自己的脚本,指定R批量执行一些命令。通常,自己的脚本会以“.R”作为扩展名。一个最简单的例子test.R:
x <- rnorm(50); y <- rnorm(x)  #产生两个随机向量x和y
plot(x,y) #使用x,y画二维散点图, 会打开一个图形窗口
并保存到工作空间,然后在R控制台,使用命令:
> source('test.R')
就可以执行该脚本。
> source('test.R', echo=TRUE)可以让脚本执行时输出更详细的信息。
 
编写脚本自动执行一些任务时,sink()函数会比较有用:
     > sink("record.lis")
会把所有后续的输出结果从控制台重定向到外部文件 record.lis 中,此时控制台中看不到命令输出的结果。使用命令:
     > sink()

可以让输出流重新定向到控制台。

5. 帮助系统

GNU软件通常都会有非常好的帮助系统,无论对于初学者还是熟练者都能带来很大的帮助。R当然也不例外。R中提供的帮助主要有以下几种:

5.1 文档和搜索

 help.start()  命令会打开浏览器,显示帮助文档。包括一些入门的文档,以及搜索功能(链接:Search Engine & Keywords)。
 

D12e79b600aa14a7fa3f195de1a20f2d

 

5.2 演示

demo()会按照包分组,列出所有可用的演示:

F5801597baf3693319070b7f4b90dc6e

 
按照名称可以开始演示,如:
demo(is.things)
 

5.3 函数帮助

如果已经知道一个函数的名称(比如solve),需要了解其所属的包、用途、用法、参数说明、返回值、参考文献、相关函数以及范例等,可以使用命令
 help(solve)或 ?solve
该命令会弹出一个窗口:

8f66186022f13ec96cfafa4e55ca36d6

5.4 函数示例

对于函数,还可以使用example()执行示例,比如:
example(solve)

5.5 关键字和运算符

与函数的帮助类似,但是需要加上引号,如:
> ? '[['   # 等价于 help('[[')
> ?'+'    #等价于 help('+')
> ?'if'    #等价于 help('if')

5.6 搜索

如果不知道函数名称,还可以进行搜索,比如:
??'analysis'  #等价于 search('analysis')

4fbbda486d8363e6610e034ed52cccc8

5.7 官方搜索

前面的帮助都受限于本地环境已经安装的包。如果要搜索R中所有的资源(包,函数、数学方法等),需要在R的官方网站搜索:
www.r-project.org—search.html

6. 学习资料

www.R-project.org   R官方网站
cran.r-project.org—manuals.html   官方网站上的一些手册和文档(必看)
staff.washington.edu—Rcourse   华盛顿大学的一个R教程

转载于:https://www.cnblogs.com/holbrook/archive/2013/05/03/3056211.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理知识总结

一&#xff1a;基本概念 数字图像&#xff1a;指由被称作像素的小块区域组成的二维矩阵。将物理图像行列划分后&#xff0c;每个小块区域称为像素&#xff08;pixel&#xff09;。每个像素包括两个属性&#xff1a;位置和灰度。图像数字化一般分为采样、量化与编码三个步骤。数…

oracle marley,滚石杂志500大专辑,对欧美音乐感兴趣的可以找来听听。

滚石杂志于2003年11月评选出的滚石杂志五百大专辑。值得一提的是&#xff0c;披头士乐队占据了前五中的三席&#xff0c;前五十中的7席&#xff0c;正式出版的专辑几乎全部入选前五百。排名 演唱者 专辑001 披头士乐队(The Beatles) Sgt. Peppers Lonely Hearts Club Band002 海…

kinect中psi是什么_PSI的完整形式是什么?

kinect中psi是什么PSI&#xff1a;每平方英寸磅/国际人口服务 (PSI: Pound per Square Inch / Population Services International) 1)PSI&#xff1a;每平方英寸磅 (1) PSI: Pound per Square Inch) PSI is an abbreviation of Pound per Square Inch. Pound per Square Inch …

jupyter notebook指定工作目录

【1】打开Anaconda Navigator 打开Anaconda Navigator&#xff0c;点击左侧Environments&#xff0c;点击base(root)->open Terminal 【2】输入指令jupyter notebook --generate-config 按下回车键&#xff0c;弹出config所在位置。 以VS Code打开文件 【3】修改第26…

五、“嵌段共聚醚酯型”易去污整理剂的结构特点及对织物服用性的影响?

“嵌段共聚醚酯型”易去污整理剂的结构特点及对织物服用性的影响? 收集资料阶段 嵌段共聚醚酯型易去污整理剂(简称聚醚酯)是涤纶最早的一种耐久性易去污剂,其商品名称为Permalose T,由英国ICI公司生产,它能使涤纶及其混纺织物具有优良的易去污、抗湿再沾污和抗静电性能。…

linux服务器指示灯,【转】明明白白你的Linux服务器——故障篇 | 旺旺知识库

在Linux/unix服务器的维护过程中&#xff0c;遇到各种各样的问题&#xff1b;有的严重&#xff0c;有的很好解决&#xff0c;有的解决过程我就记录下来与大家分享下&#xff0c;希望能给大家带来帮助。故障一、今天早上来的第一件事&#xff0c;就是检查昨天晚上刚刚重新安装的…

构件图(Component Diagram)—UML图(八)

构件图是显示代码自身结构的实现级别的图表。构件图由诸如源代码文件、二进制代码文件、可执行文件或动态链接库 (DLL) 这样的构件构成&#xff0c;并通过依赖关系相连接 下面这张图介绍了构件图的基本内容&#xff1a; 下面这张图是个构件图的实例&#xff1a; 转载于:https:/…

GAE work

https://appengine.google.com/ can visit in Home, but cannot visit in Office.Download a java SDK for GAE, will write something here.转载于:https://www.cnblogs.com/cnyao/archive/2011/05/05/2038161.html

二进制文件签名_二进制数的签名表示

二进制文件签名Prerequisite: Number systems 先决条件&#xff1a; 数字系统 Until now, we have only talked about positive numbers and have already discussed their mathematical operations. But there also exists negative numbers in the number system, in this a…

六、解释红外线纺织品的保健、保暖作用?

解释红外线纺织品的保健、保暖作用&#xff1f; 收集资料阶段 人体既是远红外的辐射源又能吸收远红外辐射。由于人体60&#xff05;&#xff5e;70&#xff05;为水‚故人体对红外辐射吸收近似于水&#xff0c;人体组织所拥有的特定振动频率和回转周波数与人体组织中的O&…

linux yum命令作用,YUM命令使用示例

YUM或Yellowdog Updater Modified是管理rpm包的前端工具。 它用于通过命令行界面或使用图形模式来安装&#xff0c;删除&#xff0c;更新和收集有关rpm软件包的信息。 使用YUM的主要优点是&#xff0c;它解决了rpm包的所有依赖关系&#xff0c;并将它们与包一起安装。下面让我们…

PySide开发MySql远程备份工具

MySql数据库安装在机房&#xff0c;而工作人员日常办公的地方距离机房有段距离&#xff0c;且不在同一楼层。出入机房不是很方便。就想着能否给这些人员开发一个图形化的备份MySql数据库的小工具&#xff1f;使用组件如下&#xff1a;(1)Python(2)PySide(3)mysqldump其实mysql已…

HadoopSourceAnalyse --- Nodemanager Container request handler

Overview Container 是Hadoop中运行任务的地方&#xff0c;当Resourcemanager收到一任务请求后&#xff0c;会向nodemanager 请求一个Container 来运行ApplicationMaster&#xff0c; ApplicationMaster运行起来之后&#xff0c;会继续向Resourcemanager请求新的container来运行…

数据结构 二叉树的存储结构_线程二叉树| 数据结构

数据结构 二叉树的存储结构线程二叉树 (Threaded Binary Tree ) A binary tree can be represented by using array representation or linked list representation. When a binary tree is represented using linked list representation. If any node is not having a child …

八、关于防水透湿整理

1,防水透湿整理加工技术的类型? 收集资料阶段 按照加工方式分类 防水透湿织物按照加工方式可分为高密织物、涂层织物和层压织物。不同加工方式所对应的织物各有特色。高密织物产生于 20 世纪 80 年代,它的密度可达到普通织物的 20 倍。在晴朗天气时,纱线孔隙大约为 10 μm…

求质数算法的N种境界 (N 10) zz

★引子 前天&#xff0c;俺在《俺的招聘经验[4]&#xff1a;通过笔试答题能看出啥&#xff1f;》一文&#xff0c;以"求质数"作为例子&#xff0c;介绍了一些考察应聘者的经验。由于本文没有政治敏感内容&#xff0c;顺便就转贴到俺在CSDN的镜像博客。   昨天&…

Python匿名函数---排序

一、列表的排序 nums [1,2,3,5,4,7,87,4,9,56,44,7,5] nums.sort()#默认从小到大排序 nums#结果为&#xff1a;[1, 2, 3, 4, 4, 5, 5, 7, 7, 9, 44, 56, 87]nums [1,2,3,5,4,7,87,4,9,56,44,7,5] nums.sort(reverseTrue)#从大到小排序 nums#结果为&#xff1a;[87, 56, 44, …

linux下怎么查kill某个进程,Linux下查询进程PS或者杀死进程kill的小技巧

假设我们要kill掉tomcat&#xff1a;那么我们首先需要tomcat的进程号pid&#xff1a;ps -aux | grep tomcat记下tomcat的PID后&#xff0c;执行&#xff1a;kill PID(tomcat)好了&#xff0c;就到这里....路人甲&#xff1a;小的们&#xff0c;灭了这个欺骗人民情感的家伙&…

opencv模板匹配

matchTemplate函数参数 模板匹配是通过模板在采集到的原图像进行滑动寻找与模板图像相似的目标。模板匹配不是基于直方图的方式&#xff0c;而是基于图像的灰度匹配。 6种匹配度量方法&#xff1a; 平方差匹配法CV_TM_SQDIFF 归一化平方差匹配法CV_TM_SQDIFF_NORMED 相关匹配…

Java程序设计4——集合类

1 JAVA集合概述 Java集合封装了一系列数据结构比如链表、二叉树、栈、队列等&#xff0c;然后提供了针对这些数据结构的一系列算法比如查找、排序、替换&#xff0c;使编程难度大大降低。&#xff08;这句话有可能是非法…