R语言
1.什么R?
- R是用于统计分析、绘图的语言和操作环境(AT&T贝尔实验室开发的一种用来进行数据探索、统计分析和作图的解释型语言)
- R是基于S语言的一个GNU项目
- 功能:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能贝尔实验室。
2.怎么使用?
环境安装
https://cloud.r-project.org/bin/windows/base/ 或者百度
界面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXIuj4cc-1617272465327)(C:\Users\white\AppData\Roaming\Typora\typora-user-images\image-20210401103458427.png)]
3.怎么玩?
一.基础 R 语言的变量
- R 语言有效变量名称由字母,数字以及点号.或下划线_组成。变量名称以 字母或点开头。
- 变量赋值 最新版本的 R 语言的赋值可以使用左箭头 <-、等号 = 、右箭 头 -> 赋值:
> var.1 = c(1,2,3)
> print(var.1)
[1] 1 2 3
> var.2 <- c(1,2,3)
> print(var.2)
[1] 1 2 3
> print(ls()) //查看已定义的变量可以使用 ls()函数:
[1] "var.1" "var.2"
> rm(var.2) //删除变量可以使用 rm()函数
> print(ls())
[1] "var.1"
>cat(1,"+",1,"=",2) //cat()函数拼接
1 + 1 = 2
sink("r_test.txt", split=TRUE) # 控制台同样输出 //sink()函数可以把控制台输出的文字直接输出到文件中去:
for (i in 1:5)
print(i)
sink() #取消输出到文件
sink("r_test.txt", append=TRUE) # 控制台不输出,追加写入文件
print("RUNOOB")
//从文件读入文字 但是如果纯粹的想将某个文件中的内容 读取为字符串,可以使用 readLines 函数
-
数学运算符
-
关系运算符 (向量之间的比较)
v<-c(2,3,4,5)
t<-c(1,2,6,7)
print(v>t)
[1] TRUE TRUE FALSE FALSE
print(v<t)
[1] FALSE FALSE TRUE TRUE
print(v==t)
[1] FALSE FALSE FALSE FALSE
print(v!=t)
[1] TRUE TRUE TRUE TRUE
print(v>=t)
[1] TRUE TRUE FALSE FALSE
print(v<=t)
[1] FALSE FALSE TRUE TRUE -
-
逻辑运算符 : 注意:# &&、||只对第一个元素进行比较
-
> v <- c(3,0,TRUE,2+2i) > t <- c(1,3,TRUE,2+3i) > print(v&&t) [1] TRUE > print(v||t) [1] TRUE > print(v|t) [1] TRUE TRUE TRUE TRUE
-
-
赋值运算符
- R 语言变量可以使用向左,向右或等于操作符来赋值
- 向左赋值: <− = <<−
- 向右赋值: −> = −>>
-
R 语言还包含了一些特别的运算符
-
: 冒号运算符,用于创建一系列数字的向量。
-
%in% 用于判断元素是否在向量里,返回布尔值,有的话返 回 TRUE,没有返回 FALSE。
-
%*% 用于矩阵与它转置的矩阵相乘。
eg:
> v <- 1:10 > print(v) [1] 1 2 3 4 5 6 7 8 9 10 > v1 <- 3 > print(v1 %in% v) [1] TRUE //建立矩阵时注意nrow 与 矩阵是否时对应的关系,true必须大写 > M = matrix(c(2,3,45,6,7),nrow = 2,ncol = 3,byrow = true) Error in matrix(c(2, 3, 45, 6, 7), nrow = 2, ncol = 3, byrow = true) : 找不到对象'true' > M = matrix(c(2,3,45,6,7),nrow = 2,ncol = 3,byrow = TRUE) Warning message: In matrix(c(2, 3, 45, 6, 7), nrow = 2, ncol = 3, byrow = TRUE) : 数据长度[5]不是矩阵行数[2]的整倍 > M = matrix(c(2,3,45,6,7,9),nrow = 2,ncol = 3,byrow = TRUE) > t = M %*% t(M) > print(t) [,1] [,2] [1,] 2038 438 [2,] 438 166
-
-
数学函数
- sqrt(n) n 的平方根10 exp(n) 自然常数 e 的 n 次方, log(m,n) m 的对数函数,返回 n 的几次方等于 m log10(m) 相当于 log(m,10)
- round (n) 对 n 四舍五入取整 (n, m) 对 n 保留 m 位小数四舍五入 ceiling (n) 对 n 向上取整 floor (n) 对 n 向下取整
- R 中的 round 函数有些情况下可能会"舍掉五
-
概率分布函数:
-
dnorm(x, mean = 0, sd = 1, log = FALSE) #的返回值是正态分布概 率密度函数值,比如 dnorm(z)则表示:标准正态分布密度函数 f(x)在 x=z 处的函数值。 > dnorm(0) [1] 0.3989423 pnorm(q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) #返回值是正态分布的分布函数值,比如 pnorm(z)等价于 P[X ≤ z] > pnorm(0) [1] 0.5 qnorm(p, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE) #返回值是给定概率 p 后的下分位点。 (4)rnorm(n, mean = 0, sd = 1) 的返回值是 n 个正态分布随机数构成的 向量。 > qnorm(0) [1] -Inf > rnorm(3,5,2) [1] 3.738724 3.633434 3.107824 # 产生 3 个平均值为 5,标准差为 2 的正态随机数 #这四个都是用来计算正态分布的函数。它们的名字都以 norm 结尾, #代表"正态分布"。分布函数名字的前缀有四种: #d - 概率密度函数 #p - 概率密度积分函数(从无限小到 x 的积分) #q - 分位数函数 #r - 随机数函数(常用于概率仿真
-
二.R 语言之数据类型
R 语言中的最基本数据类型主要有三种:
- 数字:科学 ,一般
- 逻辑:逻辑类型常量值只有 TRUE 和 FALSE。注意:R 语言区分大小写,true 或 True 不能代表 TRUE。
- 文本:中常出现的字符串(String),常量用双引号包含。在 R 语言中,文本常量既可以用单引号包含,也可以用双引号包含
对象类型来分是以下 6 种(后面会详细介绍这几种类型):
向量 (vector),列表(list),矩阵(matrix),数组(array),因子(factor), 数据框(data.frame)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gojJs4Nv-1617272465328)(D:\typora\working\R语言.assets\image-20210401113636905.png)]
-
c()是一个创造向量的函数 :如果将一个二维向量和三维向量做运算,将失去数学意 义
-
R 语言中的"下标"不代表偏移量,而代表第几个,之前讲述的常用的数学运算函数,如 sqrt 、exp 等,同样可以用 于对向量作标量运算。"向量"作为线性表结构,应该具备一些常用的线性 表处理函数
> a = c(1,2,3) > a[2] # 其他基本控制长度请查阅相关资料 [1] 2 #sort() rev() order()
-
向量排序:order() 函数返回的是一个向量排序之后的下标向量
sum 求和 mean 平均值 var 方差 sd 标准差 min/max 最大最小 range 取值范围 -
向量生成 :
-
有间隙的等差数列,可以用 seq()
seq(1, 9, 2)
-
seq 还可以生成从 m 到 n 的等差数列,只需要指定 m, n 以及数列的 长度: > seq(0, 1, length.out=3) [1] 0.0 0.5 1.0
seq(0, 1, length.out=3)
-
rep 是 repeat(重复)的意思,可以用于产生重复出现的数字序列
> rep(0, 5)
-
NA 代表的是"缺失",NULL 代表的是"不存在"。NA 缺失就想占位符,代 表这里没有一个值,但位置存在。NULL 代表的就是数据不存在。
-
-
逻辑型向量
> c(1, 2, 3) > 2 [1] FALSE FALSE TRUE > vector = c(10, 40, 78, 64, 53, 62, 69, 70) > print(vector[which(vector >= 50 & vector <70)]) [1] 64 53 62 69 #all() 用于检查逻辑向量是否全部为 TRUE,any() 用于检查逻辑向量是 #否含有 TRUE。
- 字符串:字符串数据类型本身并不复杂,注重介绍字符串的操作函数:
toupper/tolower 转换为大/小写 nchar 统计字节长度 nchar(“中文”, type=“bytes”) type=“char” 总计字符数量 substr/substring 截取字符串 从 1 到 5 // 从 5 到结束 as.numeric as.character 字符串转换为数字/字符串 strsplit (“2019;10;1”, “;”) 分隔符拆分字符串 gsub ("/", “-”, “2019/10/1”) gsub -
矩阵
-
矩阵的生成:
> v = c(1,2,3,4,5,6) > matrix(v,2,3) [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 #如果想按行填充,需要指定 byrow 属性 #矩阵中的每一个值都可以被直接访问 > m1 = matrix(v,2,3,byrow=TRUE) > m1[2,3] [1] 6 #矩阵通过字符串向量 每一个列和每一行都可以设定名称 > colnames(m1) = c("x","y","z") > rownames(m1) = c("a","b") > m1 x y z a 1 2 3 b 4 5 6 > m1[,"y"] #y列 a b 2 5 > m1["a",] #a列 x y z 1 2 3
-
矩阵的四则运算
> m1 = matrix(c(2,4),1,2) (c(...),对应的行数,列数) > m2 = matrix(c(3,4),2,1) > m1 %*% m2 [,1] [1,] 22 #逆矩阵 sovle(正常矩阵) > A = matrix(c(1, 3, 2, 4), 2, 2) > solve(A) [,1] [,2] [1,] -2.0 1.0 [2,] 1.5 -0.5 #apply() 函数可以将矩阵的每一行或每一列当作向量来进行操作 > A &#
-
-