一、单变量
我起的名字,仅作临时教学使用,学到向量以后忘记即可
1. 数据类型
R语言的数据类型大体有三种:
| 名称 | 内部名 | 示例 |
|---|---|---|
| 字符型 | character | "1", "abc" |
| 数值型 | numeric | 2067, 20.67 |
| 逻辑型 | logical | TRUE, T |
数值型变量还有还有一些特殊类型:
| 名称 | 内部名 | 示例 |
|---|---|---|
| 整数型 | interger | 20L, 67L |
| 浮点型 | double | 20.67 |
| 复数型 | complex | complex(real = 1, imaginary = 2) |
另外有一些特殊值:
| NULL | NA | NaN | Inf |
|---|---|---|---|
| 空值 | 缺省值 | 非数字 | 无穷大 |
2. 变量操作
a) 命名
R 语言的有效的变量名称由字母A-Z,a-z,数字0-9以及点号. 或下划线_组成,变量名称以字母或点开头,注意:.号开头后面不能紧跟着数字
b) 赋值
R语言支持左右箭头->、<- 以及等号=赋值,运算优先级依次降低
<-:可以用alt + -快捷打出,优先级极高,常用于变量赋值
= :优先级低,常用于函数使用时参数赋值(见后)
->:由于影响代码可读性,不推荐使用
c) 查看
单独输入变量或数据即可,例如
r
wind <- 2067;
wind
#[1] 2067
"wind_2067"
#[1] "wind_2067"
当输入内容过多过长时,控制台会智能换行,[]内的数字表示随后紧跟数据的序号
3. 常用函数
- 删除变量-
rm(变量名)
注意:删除变量需要确保该变量存在
r
a <- 2067
rm(a)
rm(a)
# 警告信息:In rm(a) : 找不到对象'a'
进阶用法后续再讲
- 查看所有变量-
ls()
注意:基于R语言的特性,创建过的变量,除非手动删除或重新打开项目,否则改了代码也依然存在,例如:
r
wi <- 20
nd <- 67
ls() #[1] "nd" "wi"
# 代码删去第一行,不关闭项目
nd <- 67
ls() #[1] "nd" "wi"
# 删除nd变量
rm(nd)
ls() #[1] "wi"
- 获取数据类型-
class()
r
class(2067)
#[1] "numeric"
由于历史遗留问题,也可以使用mode() 获取数据类型,不建议使用
- 获取底层储存类型(更精细)-
typeof()
r
typeof(2)
#[1] "double"
- 判断变量相等-
identical(变量1, 变量2)
r
identical("wind", 2067)
#[1] FALSE
- 强制转换-
as.类型(变量)
兼容:字符 > 数值 > 逻辑
高兼容向低兼容强转可能导致错误,如:as.logical("a")将返回NA
不同路径的强转结果不一定相同,如:T → 1 → "1",T → "TRUE"
学过C嘎嘎的程序猿们注意啦,这里不是as的方法,只是命名里带了个.而已
二、向量
向量 化操作是R语言的核心,R语言所有数据的储存都基于向量(vector)结构
所谓"单变量"是长度为
1的向量
1. 创建
- 创建连续整数向量-
:
r
-2 : 7
#[1] -2 -1 0 1 2 3 4 5 6 7
0 : -6
#[1] 0 -1 -2 -3 -4 -5 -6
:运算实际只支持interger型,输入double型将向下取整,其他则报错
r
2.0 : 6.7
#[1] 2 3 4 5 6
"w" : "d"
#错误于"w":"d": NA/NaN参数
#此外: 警告信息:
#1: 强制改变过程中产生了NA
#2: 强制改变过程中产生了NA
- 创建自定义内容向量-
c()
注意,向量只能存储相同类型的数据
r
c(20, "67")
#[1] "20" "67"
由于所有类型都基于向量存储,故也可以"用向量创建向量",例如:
咳咳咳,这么说其实不严谨,其实是"用长度大于1的向量创建向量"
r
c(c(2, 0), 6 : 7)
#[1] 2 0 6 7
- 创建空向量(会赋默认值)-
vector()
| 参数 | mode | length |
|---|---|---|
| 类型 | character | interger |
| 含义 | 存储类型 | 向量长度 |
r
vector(mode = "numeric", length = 2)
#[1] 0 0
2. 索引
使用[]进行索引
R语言的索引从1开始 (what a craze (꒪⌓꒪)),负数索引表示返回删除对应项的向量,例如:
r
a <- c(2067)
a[1] # 2
a[-1] # 0 6 7
索引支持使用长度大于1的向量,但要求向量的功能一致,即符号一致,依然以a为例:
r
a[c(1, 3)] # 2 6
a[c(-1, -2)] # 6 7
a[c(1, -2)] # Error
如此一来也可以连续地取值、删除:
r
a[1 : 3] # 2 0 6
a[-3 : -1] # 7
3. 常用函数
- 获取向量长度-
length(向量)
r
wind <- c(2, 0, 6, 7)
length(wind)
#[1] 4
- 获取数据类型-
class()、底层存储类型-typeod()、判断相等-identical()
同"单变量",因为"单变量"就是向量
- 数值型向量求和-
sum(numeric向量)
r
sum(c(2:0, 6:7))
#[1] 16
- 生成有序向量-
seq()
| 参数 | from | to | by | length.out (len) | along.with (along) |
|---|---|---|---|---|---|
| 类型 | numeric | numeric | numeric | interger | vector |
| 含义 | 起点 | 终点 | 步长(不为0) | 结果向量长度 | 参考向量 |
组合1:from + to + by,按步长间隔生成
r
seq(from = 20, to = 6, by = -7)
#[1] 20 13 6
组合2:from + to + len,等分区间
r
seq(from = 20, to = 6, len = 7)
#[1] 20.000000 17.666667 15.333333 13.000000 10.666667 8.333333 6.000000
组合3:from + to + along,等分区间,长度与参考向量相同
r
seq(from = 2, to = 0, along = 6:7)
#[1] 2 0
- 生成重复序列-
rep(向量, 参数)
| 参数 | times | each | length (len) |
|---|---|---|---|
| 类型 | interger | interger | interger |
| 含义 | 整体重复次数 | 单体重复次数 | 向量长度 |
组合1:向量 + times( + len),整体重复times次,除非长度提前达到len
r
rep(2:0, times = 2)
#[1] 2 1 0 2 1 0
rep(2:0, times = 2, len = 4)
#[1] 2 1 0 2
组合2:向量 + each( + len),整体重复times次,除非长度提前达到len
r
rep(6:7, each = 2)
#[1] 6 6 7 7
rep(6:7, each = 2, length = 3)
#[1] 6 6 7