R - 矢量



矢量是最基本的 R 数据对象,有六种类型的原子矢量。它们是 logical、integer、double、complex、character 和 raw。

矢量创建

单元素矢量

即使你在 R 中只写一个值,它也会变成一个长度为 1 的矢量,属于上述矢量类型之一。


# 字符类型的原子矢量。
print("abc");

# double类型的原子矢量。
print(12.5)

# 整数类型的原子矢量。
print(63L)

# 逻辑类型的原子矢量。
print(TRUE)

# 复数类型的原子矢量。
print(2+3i)

# raw类型的原子矢量。
print(charToRaw('hello'))

当我们执行上述代码时,它会产生以下结果——

[1] "abc"
[1] 12.5
[1] 63
[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)

当我们执行上述代码时,它会产生以下结果——

[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)

当我们执行上述代码时,它会产生以下结果——

[1] "apple" "red" "5" "TRUE"

访问矢量元素

矢量的元素使用索引进行访问。[ ] 括号用于索引。索引从位置 1 开始。在 index 中给出负值会从 result 中删除该元素。TRUE、FALSE 0 1 也可用于索引。


# 使用位置访问矢量元素。
t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")
u <- t[c(2,3,6)]
print(u)

# 使用逻辑索引访问矢量元素。
v <- t[c(TRUE,FALSE,FALSE,FALSE,FALSE,TRUE,FALSE)]
print(v)

# 使用负索引访问矢量元素。
x <- t[c(-2,-5)]
print(x)

# 使用0/1索引访问矢量元素。
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,8,4,5,0,11)
v2 <- c(4,11,0,8,1,2)

# 矢量添加。
add.result <- v1+v2
print(add.result)

# 矢量减法。
sub.result <- v1-v2
print(sub.result)

# 矢量乘法。
multi.result <- v1*v2
print(multi.result)

# 矢量划分。
divi.result <- v1/v2
print(divi.result)

当我们执行上述代码时,它会产生以下结果——

[1] 7 19 4 13 1 13
[1] -1 -3 4 -3 -1 9
[1] 12 88 0 40 0 22
[1] 0.7500000 0.7272727 Inf 0.6250000 0.0000000 5.5000000

矢量元素回收

如果我们将算术运算应用于两个长度不等的向量,则较短矢量的元素将被回收以完成运算。


v1 <- c(3,8,4,5,0,11)
v2 <- c(4,11)
# V2 变为 c(4,11,4,11,4,11)

add.result <- v1+v2
print(add.result)

sub.result <- v1-v2
print(sub.result)

当我们执行上述代码时,它会产生以下结果——

[1] 7 19 8 16 4 22
[1] -1 -3 0 -6 -4 0

矢量元素排序

可以使用 sort() 函数对矢量中的元素进行排序。


v <- c(3,8,4,5,0,11, -9, 304)

# 对矢量的元素进行排序。
sort.result <- sort(v)
print(sort.result)

# 按相反的顺序对元素进行排序。
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)

# 对字符矢量进行排序。
v <- c("Red","Blue","yellow","violet")
sort.result <- sort(v)
print(sort.result)

# 按相反顺序对字符矢量进行排序。
revsort.result <- sort(v, decreasing = TRUE)
print(revsort.result)

当我们执行上述代码时,它会产生以下结果——

[1] -9 0 3 4 5 8 11 304
[1] 304 11 8 5 4 3 0 -9
[1] "Blue" "Red" "violet" "yellow"
[1] "yellow" "violet" "Red" "Blue"