新博文地址:http://blog.how-to-code.info/r/how-to-begin-my-R-language.htmlhtml
@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的位置,你能够自行寻找,这里再也不赘述。
以上都弄好后,咱们能够直接打开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、基本介绍:
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个问题,想系统了解能够读读“导论”,不一一介绍了,本身看吧,都是经典教材,若是有心能读的下去基本就不用看这篇贴了~
2、数据操做
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()
不一一介绍,哪一个不懂花十秒百度一下找不着再提问。
【数值型向量索引】:
索引,引用,随便你怎么称呼,其实就是借来别的对象的数据用。在此慎重提醒一下,既然是借别的对象来用,那这个对象就应该是已经存在的,或者已经人为定义过的。
假设咱们已经定义“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的值,并计算个数。
【字符串向量】
【赋值】: 字符串赋值时把内容都写在 "" 里,同其余软件是一致的,事实上''单引号也能够,二者有何区别我也不太清楚。再次强调下:引号都是英文状态下的函数“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”这个参数能够定义成任意一个字符串,发挥你的想象吧~~~
鉴于格式太乱懒得再调,我试试发图片~