新博文地址:http://blog.how-to-code.info/r/how-to-begin-my-R-language.html
@Conda 我要如何开始R语言?
更多R语言教程/精彩文章请访问 http://r.how-to-code.info
大家可以看上图:
很多时候,我们的老板跟我们说,这个东西你用R语言去算吧,Oh,My god!什么是R语言?我要怎么开始呢?
其实回答这个问题很简单,首先,你只需要知道R语言其实就是一种计算机语言,它很强大,它是专门用来进行计算的,它比C\C++、Perl都要强大,虽然他没有C那么的万能,没有Perl那么的文本处理能力,但是在计算和数据处理上,它绝对是一顶一的,而且当初它被提出来的初衷之一就是要让非计算机专业的人也能用计算机语言完成工作,极大程度上降低了我们非计算机专业对于计算机语言掌握的难度。
好了,废话不多说,我们马上开始如何使用R。
首先,我们要下载一个软件,这个软件就叫R。因为大多数人的计算机系统为Windows,实际上如果你的系统是Linux的话,想必我们也没必要来看这边文章了。
你可以来这个网站下载R程序,http://www.r-project.org/。当然,如果你一定是找不到这个网站中R语言的程序位置,那么请看这里:http://ftp.ctex.org/mirrors/CRAN/,在这里,请点击install R for the first time,这样你就可以把这个软件下载下来了。接下来就跟我们平时使用软件一样,安装,安装时请注意一点:安装路径不要有中文字符,以避免一些不必要的麻烦。
接下来,我推荐大家一个额外的步骤,事实上你进行了上述步骤就可以真正开始你的R语言的使用了,但是我推荐大家再安装另外一个软件,叫做Rstudio。下载地址为:http://www.rstudio.com/ide/download/
如果Rstudio提示你不能找到R的位置,你可以自行寻找,这里不再赘述。
1:文本编辑区,你可以在这里写一些代码,但是目前而言,我们还不需要使用,以后会提到的。
2:workspace和历史记录,在workspace,你可以查看你的变量和数据;历史记录里面你可以查看你过去所使用过的所有记录。
3:分别是文件、作图显示区、包信息和帮助区。
4:是我们真正的R语言操作区,我们可以在这里输入我们想要的代码,得到我们的结果,接下来我们来两个简单的例子:
第一个例子:大部分程序的第一句代码都是“hello,world”,作为一种程序语言,我们也来试一下:
> print("Hello, World!")
[1] "Hello, World!"
上述红色的前面带了>符号的是需要输入到4里面去的。>符号不需要输入。每句话后需要回车。
第二个例子:我们产生1到10,一共十个数,然后每个数都加1。
> x=1:10
> x=x+1
> x
[1] 2 3 4 5 6 7 8 9 10 11
x=1:10表示产生 1 2 3 4 5 6 7 8 9 10这些数字,然后x=x+1表示每个数都加1,最后输入x后表示显示x这个变量。
应广场君之邀,简单介绍下R语言的基本操作(是真的很简单的介绍~)。具体内容包括:
1.基本介绍(关于R语言的一些常识)
2.数据操作(包括数据的属性、赋值、引用,和简单的数据处理以及外来数据的读取和写入)
3.控制流 (即循环)
注:能力有限,只针对新手作快速入门的简单介绍,使其迅速使用R做简单模拟,所以不会涉及一些不常用的操作(至少我从来没用过和很少用的)。
1.基本介绍(关于R语言的一些常识)
2.数据操作(包括数据的属性、赋值、引用,和简单的数据处理以及外来数据的读取和写入)
3.控制流 (即循环)
注:能力有限,只针对新手作快速入门的简单介绍,使其迅速使用R做简单模拟,所以不会涉及一些不常用的操作(至少我从来没用过和很少用的)。
一、基本介绍:
1. 警告:在输入命令前请切换到英文模式。否则你的一大段代码可能因为一个中文状态的括号而报错,R语言的报错并不智能无法指出错误的具体位置。最可怕的是不报错但就是无法输出正确结果。
2. 警告:R语言区别大小写,所以对象A与对象a并不一样,在调用函数、R包时也要注意大小写。
3. R软件由R包组成,每个包里有各种函数。命令“library()”【注意输入命令时不包含双引号,下同】查看原装的几十个R包列表。对于非原装的R包,可以通过命令“install.packages(\'RCurl\')”【其他包把名字把RCurl替换就是了,注意不要忘了括号里的引号】,选择任意镜像安装RCurl包。以后在调用此包的函数之前应先输入命令“library(RCurl)”【原装包的中函数不需要此命令】
4. 打开R软件,光标左侧的“>”符号表示等待输入,“+”表示承接上一行的代码。如果一句代码很长,可敲击回车继续输入。而当你输入完毕回车无输出结果并显示“+”时,很可能是你少输入了一个括号
5. R语言中“<-”表示赋值,如“x <- 3”表示赋予对象x的值为3。请不要用等号!
6. R代码中“#”后边的都表示注释,不会被执行此时可输入中文。在代码中R语言支持中文但并不好,建议全英环境。
7. R的编辑器。在R环境下编码时不要碰到“上”和“下”两个方向键。“上”会自动复制上一行的代码,“下”键会清除改行代码。另外:换行后,已经输入的代码不可更改,只有再重新输入更改赋值。
8. R语言强大的帮助功能:输入命令“?all”或者“help(all)”查看函数all的用法,其他函数自行替换名称。有时候不能得到查询结果,会自动提示使用“??”或者“help.search(‘’)”查询。还得不到结果的话请检查是否输入有误。
9. 关闭R软件,使用命令“q()”或者直接点击右上角的关闭。此时会提示“是否保存工作空间影像”,如果保存下次打开时会自动加载映像,上次操作中的已赋值的对象、数据可继续使用
好了,知道这些已经足够接下来的了,想了解更多的话就读读这些资料:
http://pan.baidu.com/share/link?shareid=22919&uk=622761108
“153分钟…”介绍了常见的153个问题,想系统了解可以读读“导论”,不一一介绍了,自己看吧,都是经典教材,如果有心能读的下去基本就不用看这篇贴了~
1. 警告:在输入命令前请切换到英文模式。否则你的一大段代码可能因为一个中文状态的括号而报错,R语言的报错并不智能无法指出错误的具体位置。最可怕的是不报错但就是无法输出正确结果。
2. 警告:R语言区别大小写,所以对象A与对象a并不一样,在调用函数、R包时也要注意大小写。
3. R软件由R包组成,每个包里有各种函数。命令“library()”【注意输入命令时不包含双引号,下同】查看原装的几十个R包列表。对于非原装的R包,可以通过命令“install.packages(\'RCurl\')”【其他包把名字把RCurl替换就是了,注意不要忘了括号里的引号】,选择任意镜像安装RCurl包。以后在调用此包的函数之前应先输入命令“library(RCurl)”【原装包的中函数不需要此命令】
4. 打开R软件,光标左侧的“>”符号表示等待输入,“+”表示承接上一行的代码。如果一句代码很长,可敲击回车继续输入。而当你输入完毕回车无输出结果并显示“+”时,很可能是你少输入了一个括号
5. R语言中“<-”表示赋值,如“x <- 3”表示赋予对象x的值为3。请不要用等号!
6. R代码中“#”后边的都表示注释,不会被执行此时可输入中文。在代码中R语言支持中文但并不好,建议全英环境。
7. R的编辑器。在R环境下编码时不要碰到“上”和“下”两个方向键。“上”会自动复制上一行的代码,“下”键会清除改行代码。另外:换行后,已经输入的代码不可更改,只有再重新输入更改赋值。
8. R语言强大的帮助功能:输入命令“?all”或者“help(all)”查看函数all的用法,其他函数自行替换名称。有时候不能得到查询结果,会自动提示使用“??”或者“help.search(‘’)”查询。还得不到结果的话请检查是否输入有误。
9. 关闭R软件,使用命令“q()”或者直接点击右上角的关闭。此时会提示“是否保存工作空间影像”,如果保存下次打开时会自动加载映像,上次操作中的已赋值的对象、数据可继续使用
好了,知道这些已经足够接下来的了,想了解更多的话就读读这些资料:
http://pan.baidu.com/share/link?shareid=22919&uk=622761108
“153分钟…”介绍了常见的153个问题,想系统了解可以读读“导论”,不一一介绍了,自己看吧,都是经典教材,如果有心能读的下去基本就不用看这篇贴了~
二、数据操作
1.对象内在属性
在R中,所有对象的数据都有两个属性:mode 和 length 即类型【包含数值型(numeric)、字符型(character)、复数性(complex)、逻辑型(logical)】和长度【包含元素个数】,可分别用函数“mode()”、“length()”得到。同时可以用“x <- numric(2)”定义x为一个长度为2的数值型数据,其他数据类型也同样,“logical(2)”表示长度为2的逻辑型数据。长度为2表示其x包含了两个数据值,用线代语言说就是x是一个2维行向量。
2.数据形式
在线性代数里有向量、矩阵和行列式等数据形式,R语言也有不同的数据形式以应对各种数据处理。包括:向量、数组、矩阵、列表、数据框和时间序列。
2.1 向量
向量是由一组同样类型(mode)的数据构成。数值向量、字符向量和逻辑向量。在统计学中数据有分类数据、顺序数据、数值数据之分,有时候看似数字但实际表示一个组别,比如在SPSS中输入数据定义0为男,1为女。由此在R中又有一种因子向量,表示类别。下面一一介绍四种向量。向量的通用赋值函数“c()”,用穷举法列出向量所有的元素。
【数值型向量赋值】:
列举法:
“x <- c(1,2,3,4,5) ”表示5维行向量,分别等于1到5,也可以写成“ x<- c(1:5)”【此用法只适用于数值型数据,且等差为1。那“c(1.4:5)”生成的数据是怎样的?just try~】
在函数“c()”中列举时也可以包含已经赋值的向量,比如上个命令我们已经对x赋值,那么“y <- c(x,x,x)”表示什么?试试看,我想你能很轻易的发现规律。
重复法:
对于命令“y <-c (x,x,x)” 还有更简单的写法,“y <- rep(x,times=3)”【当然参数x是单个元素也可以,比如“rep(1,times3)”,而且此函数在也实用于其他数据类型哦~】
函数“rep(x,time= ,each= ,length.out=)”中的“times”参数表示x的重复次数,参数“each”表示每个元素重复的次数,试试
y <- rep(x,times=3,each=2)
参数“length.out”表示截取前多少个元素,试试y<-rep(x,times=3,each=2,length.out=2)
【by the way:是不是觉着参数多的时候输入很麻烦?】
这里顺便介绍下函数参数的写法。首先声明在函数内部对参数赋值习惯用等号【虽然“<-”也可以吧】“rep(x,times=3,each=2,length.out=2)”也可以简单的写“rep(x,3,3,2)”,不用输入参数名称直接按顺序输入其值就可以了。那如何查看参数的顺序?前边是不是提到过R语言强大的帮助系统?输入命令“?rep”敲回车看看。
等差数列赋值函数:
函数“c(1:3)”的等差为1【其实是符号“:”的等差为1,可将其称为等差符】,那等差为0.5或者2怎么办?用更一般的函数“seq(from=,to=,by=,length.out=)”从“from”为第一个元素开始,最大的元素不大于“to”。
参数“by”表示等差,参数“length.out”表示等差数列元素的个数,两个参数任给一个。在参数“length.out”给定参数“by”自动按“by = ((to - from)/(length.out - 1))”计算。
不明白? 那就试试“seq(1,5,1)”跟“seq(1,5,length.out=5)”
1.对象内在属性
在R中,所有对象的数据都有两个属性:mode 和 length 即类型【包含数值型(numeric)、字符型(character)、复数性(complex)、逻辑型(logical)】和长度【包含元素个数】,可分别用函数“mode()”、“length()”得到。同时可以用“x <- numric(2)”定义x为一个长度为2的数值型数据,其他数据类型也同样,“logical(2)”表示长度为2的逻辑型数据。长度为2表示其x包含了两个数据值,用线代语言说就是x是一个2维行向量。
2.数据形式
在线性代数里有向量、矩阵和行列式等数据形式,R语言也有不同的数据形式以应对各种数据处理。包括:向量、数组、矩阵、列表、数据框和时间序列。
2.1 向量
向量是由一组同样类型(mode)的数据构成。数值向量、字符向量和逻辑向量。在统计学中数据有分类数据、顺序数据、数值数据之分,有时候看似数字但实际表示一个组别,比如在SPSS中输入数据定义0为男,1为女。由此在R中又有一种因子向量,表示类别。下面一一介绍四种向量。向量的通用赋值函数“c()”,用穷举法列出向量所有的元素。
【数值型向量赋值】:
列举法:
“x <- c(1,2,3,4,5) ”表示5维行向量,分别等于1到5,也可以写成“ x<- c(1:5)”【此用法只适用于数值型数据,且等差为1。那“c(1.4:5)”生成的数据是怎样的?just try~】
在函数“c()”中列举时也可以包含已经赋值的向量,比如上个命令我们已经对x赋值,那么“y <- c(x,x,x)”表示什么?试试看,我想你能很轻易的发现规律。
重复法:
对于命令“y <-c (x,x,x)” 还有更简单的写法,“y <- rep(x,times=3)”【当然参数x是单个元素也可以,比如“rep(1,times3)”,而且此函数在也实用于其他数据类型哦~】
函数“rep(x,time= ,each= ,length.out=)”中的“times”参数表示x的重复次数,参数“each”表示每个元素重复的次数,试试
y <- rep(x,times=3,each=2)
参数“length.out”表示截取前多少个元素,试试y<-rep(x,times=3,each=2,length.out=2)
【by the way:是不是觉着参数多的时候输入很麻烦?】
这里顺便介绍下函数参数的写法。首先声明在函数内部对参数赋值习惯用等号【虽然“<-”也可以吧】“rep(x,times=3,each=2,length.out=2)”也可以简单的写“rep(x,3,3,2)”,不用输入参数名称直接按顺序输入其值就可以了。那如何查看参数的顺序?前边是不是提到过R语言强大的帮助系统?输入命令“?rep”敲回车看看。
等差数列赋值函数:
函数“c(1:3)”的等差为1【其实是符号“:”的等差为1,可将其称为等差符】,那等差为0.5或者2怎么办?用更一般的函数“seq(from=,to=,by=,length.out=)”从“from”为第一个元素开始,最大的元素不大于“to”。
参数“by”表示等差,参数“length.out”表示等差数列元素的个数,两个参数任给一个。在参数“length.out”给定参数“by”自动按“by = ((to - from)/(length.out - 1))”计算。
不明白? 那就试试“seq(1,5,1)”跟“seq(1,5,length.out=5)”
【数值型向量运算】:向量的运算规则:
向量的运算实质是多个向量中对应的每个元素的运算,即向量a的第n个元素与向量b的第n个元素运算。如:
1:5 * 1:5
[1] 1 4 9 16 25 #最前边的“[1]”不用管它
如果你足够敏锐,应该会问两个长度不等的向量运算怎么办?答案是短向量会拉长到与另一向量的长度相等。拉伸的规则同“rep()”函数。如:
1:2 * 1:6
[1] 1 4 3 8 5 12
这里就相当与:
rep(1:2,times=3)* 1:6
注意到向量 1:6 刚好是 1:2 的倍数。如果不成倍的话,短向量重复次数不成倍,会得到一个警告信息。如:
1:5 * 1:6
[1] 1 4 9 16 25 6
警告信息:In 1:5 * 1:6 : 长的对象长度不是短的对象长度的整倍数
这里短向量 1:5 在运算时只增加了一个元素1.相当于:
rep(1:5,times=2,length.out=6) * 1:6 #这个结果是一样的,但不会得到警告信息
向量的运算函数:
运算符: +、-、*、/、^ 不解释。 %% 表示求余数、%/% 表示整除,即留整。四舍五入咋个办?我也不知道,你知道这个运算符或者函数告诉我哈~
数学函数: exp()、sqrt()、sin()、cos()、tan()、cot() 【自行回想其他三角函数】
统计函数: min()、max()、range()、mean()、sum()、median()、var()、sd()、sort()
不一一介绍,哪个不懂花十秒百度一下找不着再提问。
向量的运算实质是多个向量中对应的每个元素的运算,即向量a的第n个元素与向量b的第n个元素运算。如:
1:5 * 1:5
[1] 1 4 9 16 25 #最前边的“[1]”不用管它
如果你足够敏锐,应该会问两个长度不等的向量运算怎么办?答案是短向量会拉长到与另一向量的长度相等。拉伸的规则同“rep()”函数。如:
1:2 * 1:6
[1] 1 4 3 8 5 12
这里就相当与:
rep(1:2,times=3)* 1:6
注意到向量 1:6 刚好是 1:2 的倍数。如果不成倍的话,短向量重复次数不成倍,会得到一个警告信息。如:
1:5 * 1:6
[1] 1 4 9 16 25 6
警告信息:In 1:5 * 1:6 : 长的对象长度不是短的对象长度的整倍数
这里短向量 1:5 在运算时只增加了一个元素1.相当于:
rep(1:5,times=2,length.out=6) * 1:6 #这个结果是一样的,但不会得到警告信息
向量的运算函数:
运算符: +、-、*、/、^ 不解释。 %% 表示求余数、%/% 表示整除,即留整。四舍五入咋个办?我也不知道,你知道这个运算符或者函数告诉我哈~
数学函数: exp()、sqrt()、sin()、cos()、tan()、cot() 【自行回想其他三角函数】
统计函数: min()、max()、range()、mean()、sum()、median()、var()、sd()、sort()
不一一介绍,哪个不懂花十秒百度一下找不着再提问。
【数值型向量索引】:
索引,引用,随便你怎么称呼,其实就是借来别的对象的数据用。在此慎重提醒一下,既然是借别的对象来用,那这个对象就应该是已经存在的,或者已经人为定义过的。
假设我们已经定义“x <- 1:5”,那下次你再需要一个 1:5 这样一个向量时直接用x来代替就是索引。但很多时候我们是只需要某个对象中的部分信息,比如你只想在成绩单里找到自己的成绩。
来到重点:
索引分为位置索引和逻辑索引【这对所有的索引都是成立的,与对象无关,管它是数值型还是字符型,管它向量还是列表】
所有的索引都是装在一个中括号里的,“[]”.【注意是英文状态下的中括号】
位置索引就是找到某个位置的数据,比如你知道你的排名是第一,那就看成绩单里的第一个成绩吧。
x <- 1:4
x[2] #就表示对象x的第二个元素,很简单吧。
逻辑索引就是在“[]”写一个表达式,找到符合表达式的元素。如: x[x>2] 就是找到x中大于2的元素.
介绍几个常用逻辑符号: <、>、>=、<=、==【表示两个对象恒相等】 != 不等
索引,引用,随便你怎么称呼,其实就是借来别的对象的数据用。在此慎重提醒一下,既然是借别的对象来用,那这个对象就应该是已经存在的,或者已经人为定义过的。
假设我们已经定义“x <- 1:5”,那下次你再需要一个 1:5 这样一个向量时直接用x来代替就是索引。但很多时候我们是只需要某个对象中的部分信息,比如你只想在成绩单里找到自己的成绩。
来到重点:
索引分为位置索引和逻辑索引【这对所有的索引都是成立的,与对象无关,管它是数值型还是字符型,管它向量还是列表】
所有的索引都是装在一个中括号里的,“[]”.【注意是英文状态下的中括号】
位置索引就是找到某个位置的数据,比如你知道你的排名是第一,那就看成绩单里的第一个成绩吧。
x <- 1:4
x[2] #就表示对象x的第二个元素,很简单吧。
逻辑索引就是在“[]”写一个表达式,找到符合表达式的元素。如: x[x>2] 就是找到x中大于2的元素.
介绍几个常用逻辑符号: <、>、>=、<=、==【表示两个对象恒相等】 != 不等
【数值型向量处理】
直接举例说明。首先定义: “x <- 1:5” 一个五维行向量
1.判断是否为数值型向量
is.numeric(x)
其他向量转换为数值型向量: as.numeric()
同样判断是否为字符、逻辑的函数: is.character()、is.logical()
转化为字符、逻辑的函数: as.character()、as.logical()
2.增加一个元素为6.
x[6] <- 6如果直接写“ x[8] <- 6 ”那么x的第六和第七个元素自动赋值为“NA”,表示缺失值。
3.接上,删除向量中的缺失值。
x[is.na(x)=F]
函数 is.na() 判断是否为缺失值。 “x[is.na(x)=F]”表示索引出x中不是缺失值的元素。“length(x[is.na(x)])”返回x中缺失值的个数。
4.删除最后一个元素
x <- x[1:(length(x)-1)]
很简单,不解释了,应该可以看懂的
5.更改某个元素,如第三个元素改为8
x[3] <- 8
一个小考题:
首先输入命令 “x<- rnorm(100) #产生100个标准正态分布随机数”,找出x中绝对值小于1.96的值,并计算个数。
直接举例说明。首先定义: “x <- 1:5” 一个五维行向量
1.判断是否为数值型向量
is.numeric(x)
其他向量转换为数值型向量: as.numeric()
同样判断是否为字符、逻辑的函数: is.character()、is.logical()
转化为字符、逻辑的函数: as.character()、as.logical()
2.增加一个元素为6.
x[6] <- 6如果直接写“ x[8] <- 6 ”那么x的第六和第七个元素自动赋值为“NA”,表示缺失值。
3.接上,删除向量中的缺失值。
x[is.na(x)=F]
函数 is.na() 判断是否为缺失值。 “x[is.na(x)=F]”表示索引出x中不是缺失值的元素。“length(x[is.na(x)])”返回x中缺失值的个数。
4.删除最后一个元素
x <- x[1:(length(x)-1)]
很简单,不解释了,应该可以看懂的
5.更改某个元素,如第三个元素改为8
x[3] <- 8
一个小考题:
首先输入命令 “x<- rnorm(100) #产生100个标准正态分布随机数”,找出x中绝对值小于1.96的值,并计算个数。
【字符串向量】
【赋值】: 字符串赋值时把内容都写在 "" 里,同其他软件是一致的,事实上\'\'单引号也可以,两者有何区别我也不太清楚。再次强调下:引号都是英文状态下的函数“c()”“rep()”仍然适用。另介绍函数“paste()”。一部电视剧有数十集,文件名一般为:“水浒传1”“水浒传2”...“水浒传n”...下面就用 paste() 函数来建立一个字符向量:paste("水浒传",1:30) # 30集水浒传的文件名
其运算规则就是把逗号隔开的两个向量按顺序组合了一下,跟数值型向量的向量计算规则是一样的。当然也可以多个向量组合:paste("水浒传",1:30,"集")
注意到两个细节:
1.函数内部有字符有数字,是的,这家伙能把所有类型的东西全部按字符串组合起来。
2.在输出结果中【"水浒传 1"】发现两个元素之间有个空格,如何取消?
paste() 函数里有一个参数“sep=" "”,表示将不同对象组合时默认用空格隔开,修改这个参数就ok了。
paste("水浒传",1:30,sep="")
当然“sep”这个参数可以定义成任意一个字符串,发挥你的想象吧~~~
【赋值】: 字符串赋值时把内容都写在 "" 里,同其他软件是一致的,事实上\'\'单引号也可以,两者有何区别我也不太清楚。再次强调下:引号都是英文状态下的函数“c()”“rep()”仍然适用。另介绍函数“paste()”。一部电视剧有数十集,文件名一般为:“水浒传1”“水浒传2”...“水浒传n”...下面就用 paste() 函数来建立一个字符向量:paste("水浒传",1:30) # 30集水浒传的文件名
其运算规则就是把逗号隔开的两个向量按顺序组合了一下,跟数值型向量的向量计算规则是一样的。当然也可以多个向量组合:paste("水浒传",1:30,"集")
注意到两个细节:
1.函数内部有字符有数字,是的,这家伙能把所有类型的东西全部按字符串组合起来。
2.在输出结果中【"水浒传 1"】发现两个元素之间有个空格,如何取消?
paste() 函数里有一个参数“sep=" "”,表示将不同对象组合时默认用空格隔开,修改这个参数就ok了。
paste("水浒传",1:30,sep="")
当然“sep”这个参数可以定义成任意一个字符串,发挥你的想象吧~~~
鉴于格式太乱懒得再调,我试试发图片~