向量是 R 语言最基本的数据类型。
原子向量有6种类型:逻辑型(logical),整型(integer),双精度型(double),字符型(character),复数型(complex)和原始型(raw)。
创建向量
以下我们创建单个元素的向量,可以是以上 6 中类型中的任意一种:
实例
# 字符型原子向量
print("runoob");
# 双精度型原子向量
print(12.5)
# 整型原子向量
print(23L)
# 逻辑型原子向量
print(TRUE)
# 复数型原子向量
print(2+3i)
# 原始型原子向量
print(charToRaw('hello'))
print("runoob");
# 双精度型原子向量
print(12.5)
# 整型原子向量
print(23L)
# 逻辑型原子向量
print(TRUE)
# 复数型原子向量
print(2+3i)
# 原始型原子向量
print(charToRaw('hello'))
执行以上代码输出结果为:
[1] "runoob"[1] 12.5[1] 23[1] TRUE[1] 2+3i[1] 68 65 6c 6c 6f
以下我们创建多个元素的向量,数字之间使用冒号 : 运算符:
实例
# 创建 5 到 13 到系列
v <- 5:13
print(v)
# 创建 6.6 到 12.6 的系列
v <- 6.6:12.6
print(v)
# 如果最后一个元素不属于系列,就丢弃
v <- 3.8:11.4
print(v)
v <- 5:13
print(v)
# 创建 6.6 到 12.6 的系列
v <- 6.6:12.6
print(v)
# 如果最后一个元素不属于系列,就丢弃
v <- 3.8:11.4
print(v)
执行以上代码输出结果为:
[1] 5 6 7 8 9 10 11 12 13[1] 6.6 7.6 8.6 9.6 10.6 11.6 12.6[1] 3.8 4.8 5.8 6.8 7.8 8.8 9.8 10.8
我们也可以使用系列运算符 seq() 来创建向量。
以下实例我们创建 5 到 9 递增 0.4 的向量:
print(seq(5, 9, by = 0.4))
执行以上代码输出结果为:
[1] 5.0 5.4 5.8 6.2 6.6 7.0 7.4 7.8 8.2 8.6 9.0
c() 函数可以把非字符的元素转换为字符:
实例
# 数字和逻辑字符将转化为字符类型
s <- c('apple','red',5,TRUE)
print(s)
s <- c('apple','red',5,TRUE)
print(s)
执行以上代码输出结果为:
[1] "apple" "red" "5" "TRUE"
访问向量元素
访问向量元素可以使用中括号 [],索引值从 1 开始(跟其他编程语言不太一样),如果索引为负数,则会删除该位置的元素,TRUE,FALSE 或 0 和 1。
实例
# 使用索引访问向量元素
t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
u <- t[c(2,3,6)]
print(u)
# 使用逻辑索引,TRUE 表示读取,FALSE 为不读取
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)
# 第二个和第五个会被删除
x <- t[c(-2,-5)]
print(x)
# 使用 0/1 索引,1 表示读取,0 为不读取
y <- t[c(0,0,0,0,0,0,1)]
print(y)
t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
u <- t[c(2,3,6)]
print(u)
# 使用逻辑索引,TRUE 表示读取,FALSE 为不读取
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)
# 第二个和第五个会被删除
x <- t[c(-2,-5)]
print(x)
# 使用 0/1 索引,1 表示读取,0 为不读取
y <- t[c(0,0,0,0,0,0,1)]
print(y)
执行以上代码输出结果为:
[1] "Mon" "Tue" "Fri"[1] "Sun" "Fri"[1] "Sun" "Tue" "Wed" "Fri" "Sat"[1] "Sun"
向量运算
我们可以对两个长度相同的向量进行相加,相减,相乘或相除等操作,结果同样以向量输出。
实例
# 创建两个向量
v1 <- c(3,1,4,5,0,12)
v2 <- c(5,11,9,8,1,22)
# 相加
add.result <- v1+v2
print(add.result)
# V相减
sub.result <- v1-v2
print(sub.result)
# 相乘
multi.result <- v1*v2
print(multi.result)
# 相除
divi.result <- v1/v2
print(divi.result)
v1 <- c(3,1,4,5,0,12)
v2 <- c(5,11,9,8,1,22)
# 相加
add.result <- v1+v2
print(add.result)
# V相减
sub.result <- v1-v2
print(sub.result)
# 相乘
multi.result <- v1*v2
print(multi.result)
# 相除
divi.result <- v1/v2
print(divi.result)
执行以上代码输出结果为:
[1] 8 12 13 13 1 34[1] -2 -10 -5 -3 -1 -10[1] 15 11 36 40 0 264[1] 0.60000000 0.09090909 0.44444444 0.62500000 0.00000000 0.54545455
循环向量
如果两个元素的向量长度不一样,较短的会循环自身的元素,直到与长的向量元素一致。
实例
v1 <- c(1,8,7,5,0,12)
v2 <- c(5,6)
# V2 变成 c(5,6,5,6,5,6)
add.result <- v1+v2
print(add.result)
sub.result <- v1-v2
print(sub.result)
v2 <- c(5,6)
# V2 变成 c(5,6,5,6,5,6)
add.result <- v1+v2
print(add.result)
sub.result <- v1-v2
print(sub.result)
执行以上代码输出结果为:
[1] 6 14 12 11 5 18[1] -4 2 2 -1 -5 6向量排序
我们可以使用 sort() 函数对向量进行排序:
实例
v <- c(2,11,6,5,0,21, -7, 111)
# 排序
sort.result <- sort(v)
print(sort.result)
# decreasing 参数 TRUE 设置为降序,默认为 FALSE 为升序
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
# 对字符类型进行排序
v <- c("Runoob","Google","Zhihu","Facebook")
sort.result <- sort(v)
print(sort.result)
# 降序
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
# 排序
sort.result <- sort(v)
print(sort.result)
# decreasing 参数 TRUE 设置为降序,默认为 FALSE 为升序
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
# 对字符类型进行排序
v <- c("Runoob","Google","Zhihu","Facebook")
sort.result <- sort(v)
print(sort.result)
# 降序
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)
执行以上代码输出结果为:
[1] -7 0 2 5 6 11 21 111[1] 111 21 11 6 5 2 0 -7[1] "Facebook" "Google" "Runoob" "Zhihu" [1] "Zhihu" "Runoob" "Google" "Facebook"