R语言—90分钟从入门到精通

1. 初识R

1.1 安装R

Step1. 打开官网 The R Project for Statistical Computing
Step2. 点击download R
R官网
Step3. 选择镜像China
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)
  })

或采用界面方式更改镜像

  1. 打开Tools->Global Options->Packages
  2. 在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样例
数值型numeric1,2,3
逻辑型logicalTRUE 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.framehead(iris)
向量vectorc(1,2,3,4)
列表listlist(list(1,2,3,4),list(‘a’,‘b’))
数组matrixmatrix(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(con1){

}else if(con2){

} else {
…}

用if条件判断语句实现功能-以Pima- Indians- diabetes印度糖尿病数据集为例,为检验指定变量是否显著影响糖尿病发病问题。我们对该Pima- Indians- diabetes数据集中怀孕次数做了方差检验,但方差检验必须满足2个条件:

  1. 数据服从正态分布
  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.618009e-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.618009e-05 16.529151
 # 2      Pla_glus 8.416627e-15 68.781816
 # 3 bloodPressure 4.986853e-02  3.885661
 # 4       Triceps 2.007306e-01  1.646236
 # 5       insulin 4.140004e-03  8.500660
 # 6     massIndex 8.490817e-08 30.575634
 # 7      function 1.793037e-03  9.975887
 # 8           Age 9.086480e-07 25.443602

作业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与数据产品。

Rshiny官网
Rmarkdown官网

6. 简单介绍R与机器学习

R有很多用于机器学习的包

  • 聚类算法中主成分分析、kmeans、DBSCAN、层次分析法;
  • 分类算法中KNN、SVM、决策树、随机森林、XGBOOST等;
  • 深度学习中MXNetR、darch、deepnet、H2O、deepr包等;
  • 自然语言处理中Rwordseg是最常见的分词包;
    此外,R还可以用于爬虫等其他技术领域。

这里我们重点讲聚类算法中的kmeans以及分类算法中C5.0

7. 获得更多R资源

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值