大家好,欢迎来到IT知识分享网。
R语言—90分钟从入门到精通
1. 初识R
1.1 安装R
Step1. 打开官网 The R Project for Statistical Computing
Step2. 点击download R
Step3. 选择镜像
Step4. 选择你所需的R版本,在此以Windows为例
Step5. 点击install R for the first time.
Step6. 进入下载界面,出现最新版本下载,也可以在该页面跳转到下载历史版本,这里我们下载最新的版本R-3.6.0
Step7.打开下载下来的应用程序,如下图:
Step8:双击后,按照提示操作,最终安装到默认目录下C:\Program Files\R\R-3.6.0,当然,你也可以放在其他目录。此时,在你的桌面会有带有R图标的软件,双击打开,进入R控制台。
如上,我们已经下载了R软件,可以通过任务栏h中文件=>新建程序脚本打开进入到编辑界面,在此我们可以编写R代码,如下:我们运行了一段代码,并输出结果3。
#在R中“=”表示赋值,“#”表示注释 a=1 #将1赋值给a b=2 #将2赋值给b c=a+b #将a加b的结果赋值给c c #打印出c的结果
1.2 R编辑器-Rstudio安装
Step1. RStudio是R软件的编译器,它让用户交互体验更好,点击RStudio下载链接。
Step2. 下载后,运行RStudio-1.2.1335.exe
Step3. 安装后,打开编辑器。
Step4. 认识RStudio并新建R脚本
File->New File->R script 创建R scrip,输入以下代码,查看运行结果,可以看到console控制台输出运行结果。
getwd() #查看保存文件的路径 a=1 #将1赋值给a b=2 #将2赋值给b c=a+b #将a加b的结果赋值给c c #打印出c的结果
1.3 更换镜像/安装包/帮助文档
1.3.1 更换镜像
# 使用代码改变镜像,将镜像赋值给r['CRAN'] local( { r <- getOption("repos") r["CRAN"] <- "https://mirrors.tuna.tsinghua.edu.cn/CRAN/" options(repos=r) })
或采用界面方式更改镜像
- 打开Tools->Global Options->Packages
- 在Package Management-Primary CRAN repository更改镜像文件,点击确认。
1.3.2 安装包
# 利用代码安装包
install.packages("ggplot2")
#调用包
require(ggplot2)
#或
library(ggplot2)
#假设装包失败,可以试图换一个镜像,更换地址:https://cran.r-project.org/mirrors.html
1.3.3 查看帮助文档
# help(package="packagename") # help(packagename) library(ggplot2) help(package="ggplot2") help(ggplot2)
1.4 常见读取文件方式
1.5 R链接数据库
2. 常见的数据类型及其转换
2.1 几种常见的数据类型
| 数据类型-Ch | 数据类型-En | 样例 |
|---|---|---|
| 数值型 | numeric | 1,2,3 |
| 逻辑型 | logical | TRUE Or FALSE |
| 字符型 | character | “little tree” |
| 因子型 | factor |
举例说明:
#======class查看数据所属的类型=== class(data.frame(1,2,3)) [1] "data.frame" class(TRUE) #[1] "logical" class("beautiful code") #[1] "character" class(1) #[1] "numeric" class(as.factor(1)) #[1] "factor" #======mode查看对象存储模式== mode(data.frame(1,2,3,4)) #[1] "list" mode(TRUE) #[1] "logical" mode("beautiful code") #[1] "character" mode(as.factor(c(1,2,3))) #[1] "numeric"
以上对比可知,class(data.frame(1,2,3,4))得到数据所属类型是数据框,mode(data.frame(1,2,3,4))则是list,说明数据框存储模式是以list存储的,所以数据框是特殊的数列。
2.2 检查数据类型
#=========is.*()====== is.integer(1.3) #[1] FALSE is.double(3) #[1] TRUE is.factor(89) #[1] FALSE is.numeric(2.3) #[1] TRUE is.logical(TRUE) #[1] TRUE is.logical("TRUE") #[1] FALSE is.complex(9i) #[1] TRUE
2.3 强制数据类型转换
#===as.*()===== as.numeric("8") #[1] 8 as.logical(8) #[1] TRUE as.character(8) #[1] "8" as.factor("8") #[1] 8 #Levels: 8
2.4 特殊的数据类型
NULL:空数据
NA:表示无数据
NaN:表示非数字
inf:数字除以0得到的值
以上分别用is.null()、is.na()、is.nan()、is.infinite()查看是否是该种数据。
3. 数据结构
3.1常见的几种数据结构
| 数据结构-Ch | 数据结构-En | 样例 | 数据类型一致 |
|---|---|---|---|
| 数据框 | Data.frame | head(iris) | 否 |
| 向量 | vector | c(1,2,3,4) | 是 |
| 列表 | list | list(list(1,2,3,4),list(‘a’,‘b’)) | 否 |
| 数组 | matrix | matrix(1:12,ncol=3) | 是 |
其中,data.frame这种数据类型在我们之后的例子中会反复出现。
3.2 函数
函数一般包括:函数名、参数和程序主体。
#======函数一般表现形式:Func<-function(){...}==== #一、下面定义了函数可以实现平方计算,return返回输出值, myfun=function(x){y=x*x;return(y)} a<-myfun(4) a #>[1] 16 #二、若无输出值,默认为最后一行返回结果 myf=function(x){y=x*x; y} myf(2) #>[1] 4 #三、若最后一行无返回结果,那么函数将无返回结果 myf=function(x){y=x*x} myf(2) #>
3.3 对象
R是一种基于对象(object)的语言,所以我们在R语言中看到的一切事物都是对象,向量是对象,函数是对象,图形是对象。
简单说,我们可以把一辆奥迪车看做是R对象(object),奥迪车里有很多零部件,如方向盘、油门、刹车、座椅,所有的这些事物都是对象。而这些方向盘、油门、刹车则各有不同的属性(如方向盘尺寸、大小、颜色等属性),类也是其中一种属性。
4. 句法结构
4.1 if 条件判断语句
if条件判断语句,用来执行满足给定条件的语句.
用if条件判断语句实现功能-以Pima- Indians- diabetes印度糖尿病数据集为例,为检验指定变量是否显著影响糖尿病发病问题。我们对该Pima- Indians- diabetes数据集中怀孕次数做了方差检验,但方差检验必须满足2个条件:
- 数据服从正态分布
- 方差的齐次性
Pima- Indians- diabetes数据集见引文文章末尾[附录1],或
链接: https://pan.baidu.com/s/1iNYZA3TWr8Qsn24uciedqA 提取码: nahe
数据变量说明: # Number of times pregnant 怀孕次数 # Plasma glucose concentration a 2 hours in an oral glucose tolerance test 口服葡萄糖耐受试验中,2小时的血浆葡萄糖浓度。 # Diastolic blood pressure (mm Hg) 舒张压(mm Hg) # Triceps skin fold thickness (mm) 三头肌皮肤褶层厚度(mm) # 2-Hour serum insulin (mu U/ml) 2小时血清胰岛素含量(μU/ ml) # Body mass index (weight in kg/(height in m)^2) 体重指数(体重,kg /(身高,m)^ 2) # Diabetes pedigree function 糖尿病家族史 # Age (years) 年龄(岁) # Class variable (0 or 1) 类变量(0 或 1)
分析各解释变量与因变量之间的关系 #将Pima-Indians-diabetes.txt放在某文件夹中,然后修改下面的路径获取数据 diabetes=read.table("E:\\2019\\分享\\LearningR\\Pima- Indians- diabetes.txt",header = FALSE,sep=',',stringsAsFactors = FALSE) colnames(diabetes)<-c("PregntCnt","Pla_glus","bloodPressure","Triceps","insulin","massIndex","function","Age","Class")#给数据列命名 head(diabetes) summary(diabetes)#查看数据整体情况 nrow(diabetes)#查看行数 diabetes$Class<-as.factor(diabetes$Class)#将分类变量因子化 #显著检验:1.正态检验通过-->齐次性检验-->通过,oneway.test-->不通过,用anova.lm # 2.正态检验不通过--->kruskal.test shapiro<-shapiro.test(diabetes[,1]) if(shapiro$p.value<0.05){ bartlett_result<-bartlett.test(diabetes[,1],diabetes$Class) if (bartlett_result$p.value<0.05){ oneway<-oneway.test(diabetes[,1]~diabetes$Class) #方差不齐次采用oneway.test检验 p<-oneway$p.value F<-oneway[1]$statistic }else{ anov<-anova(lm(diabetes[,1]~diabetes$Class))#方差齐次采用anova检验 p<-anov$`Pr(>F)` F<-anov$`F value` } }else {p<-kruskal.test(diabetes[,1]~diabetes$Class)} 运行结果 >p #[1] 7.e-05 > F # F #16.52915
4.2 for循环
p<-c() F<-c() for(i in 1:(ncol(diabetes)-1)){ if(shapiro$p.value<0.05){ bartlett_result<-bartlett.test(diabetes[,i],diabetes$Class) if (bartlett_result$p.value<0.05){ oneway<-oneway.test(diabetes[,i]~diabetes$Class) #方差不齐次采用oneway.test检验 p[i]<-oneway$p.value F[i]<-oneway[1]$statistic }else{ anov<-anova(lm(diabetes[,i]~diabetes$Class))#方差齐次采用anova检验 p[i]<-anov$`Pr(>F)` F[i]<-anov$`F value` } }else {p[i]<-kruskal.test(diabetes[,i]~diabetes$Class)} } result<-data.frame(variable=colnames(diabetes[,1:8]),p,F) > result # variable p F # 1 PregntCnt 7.e-05 16. # 2 Pla_glus 8.e-15 68. # 3 bloodPressure 4.e-02 3. # 4 Triceps 2.007306e-01 1. # 5 insulin 4.e-03 8. # 6 massIndex 8.e-08 30. # 7 function 1.e-03 9. # 8 Age 9.086480e-07 25.
作业1:将上述 for 循环改成函数,函数名为myTest
4.3 while循环
#-----while循环的一般形式:
while(cond1){
…}
# 1. 设定初始值 n=0 i=1 # 2. while循环体 while(i<100){ print(i) n=n+i i=i+1 } # 3. 实现从1加到99 print(n)
4.4 Switch语句
R中的switch语句和其他的语句有很大区别
·
C语言中switch语句语法:
switch(expr){
case constant-expression:
statement(s);
break;
case constant-expression:
statement(s);
break;
R语言中switch语句语法:
switch(expr,list)
其中,expr为表达式,其值或者为字符串或者为数值;
list为一个列表
# (1) 当expr为数值时,表示list的位置,当数值超过list长度,返回空值 switch(2, "翔宇亭IT乐园", "百度百家号", "R语言学习") # [1] "百度百家号" switch(5, "翔宇亭IT乐园", "百度百家号", "R语言学习") # (2) 当expr为字符串,有点类似于键值对{key:words},expr相当于输入key,找对应的words switch('fruit', drink="water", meat = "beef", fruit = "apple", vegetable="cabbage") # [1] "apple"
5. R与数据产品
工作中,老板往往不仅限让你去分析数据,得到结论。而更多的是让你从分析问题的角度出发,思考怎样将这种分析思路转换成更通用化、更便于理解和使用的产品。并且,将这些产品展示出来。于是,工业界就诞生了数据产品这一职能。
事实上,一位出色的数据科学家一定程度上也扮演者上述的角色。所以,接下来要介绍的就是R与数据产品。
6. 简单介绍R与机器学习
R有很多用于机器学习的包
聚类算法中主成分分析、kmeans、DBSCAN、层次分析法;分类算法中KNN、SVM、决策树、随机森林、XGBOOST等;深度学习中MXNetR、darch、deepnet、H2O、deepr包等;自然语言处理中Rwordseg是最常见的分词包;
此外,R还可以用于爬虫等其他技术领域。
这里我们重点讲聚类算法中的kmeans以及分类算法中C5.0
7. 获得更多R资源
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112060.html











