R语言数据类型4:R语言中向量、矩阵和数组的比较 Comparison of vectors, matrices, and arrays in R
在 R 语言中,向量 (Vector)、矩阵 (Matrix) 和 数组 (Array) 是三种核心的数据结构,都是用来存储同类型Homogeneous数据(即所有元素必须是同一种基本数据类型,如数值型 numeric、逻辑型 logical、字符型 character、复数型 complex等)的多维数据结构。它们的核心区别在于维度 (Dimension) 的数量。
1.名称属性函数
1.1 vectors——names()
names(x)#获取对象元素名称
names(x) <- value#设置对象元素名称
- x 一个 R 对象。
- value 长度与 x 相同的字符向量,或者 NULL 。
names(c(a=1,b=2))
names(matrix(1:4,nrow=2))
- 'a'
- 'b'
NULL
1.2 matrixs——rownames()\ colnames()
rownames(x, do.NULL = TRUE, prefix = "row")
rownames(x) <- value
colnames(x, do.NULL = TRUE, prefix = "col")
colnames(x) <- value
- x 二维对象(矩阵、数据框)。
- do.NULL 逻辑值:TRUE:无行名时返回 NULL FALSE:无行名时自动生成名称
- prefix 当 do.NULL = FALSE时,生成名称的前缀(如 “row1”, “row2”)
- value 该组件的有效值 dimnames(x) 。对于矩阵或数组,这是 NULL 或长度非零且等于适当维度的字符向量。
1.3 arrays——dimnames()
dimnames(x)#获取维度名称
dimnames(x) <- value#设置维度名称
provideDimnames(x, sep = "", base = list(LETTERS), unique = TRUE)#为未命名的维度自动生成名称
- x R 对象,例如矩阵、数组或数据框。
- value 包含各维度名称的列表(长度必须与 dim(x)相同)
- sep 名称前缀和后缀的连接符
- base 各维度名称基础字符的列表
- unique 是否确保所有名称唯一
使用生物医学数据时,通过 base参数可设置标准命名(如 base=list(LETTERS, 1:24)创建96孔板名称)
2 维度相关函数
2.1 vector——length()
length(x)#获取对象长度
length(x) <- value#动态调整长度
+ x 一个 R 对象。
+ value 一个非负整数或双精度数(将被向下取整)。
2.2 nrow(), ncol(), NROW(), NCOL()
nrow(x)
ncol(x)
NCOL(x)
NROW(x)
- 仅适用于二维对象 (矩阵/数据框)
- 对向量返回
NULL - nrow(x)& ncol(x)- 严格维度检查
- NROW(x)& NCOL(x)- 通用维度适配
2.3 dim()
dim(x) #获取对象维度信息
dim(x) <- value#设置/转换对象维度
- x 一个 R 对象,例如矩阵、数组或数据框。
- value 对于默认方法,可以是 NULL 或一个数值向量,该向量会被截断转换为整数。
# 矩阵:返回行数+列数
mat <- matrix(1:6, nrow=2)
dim(mat) # c(2, 3)
# 数据框:返回行数+列数
df <- data.frame(A=1:3, B=4:6)
dim(df) # c(3, 2)
# 数组:返回各维度长度
arr <- array(1:24, dim=c(2,3,4))
dim(arr) # c(2, 3, 4)
# 向量:返回NULL(无维度属性)
vec <- 1:5
dim(vec) # NULL
- 2
- 3
- 3
- 2
- 2
- 3
- 4
NULL
# 向量 -> 矩阵/数组
m <- 1:12
dim(m) <- c(3,4) # 3行4列矩阵
dim(m) <- c(2,3,2) # 2×3×2三维数组
3 合并函数
3.1 按行或按列组合 R 对象cbind,rbind
cbind(..., deparse.level = 1)#列方向合并(增加新列)
rbind(..., deparse.level = 1)#行方向合并(增加新行)
mat1 <- matrix(1:4, nrow=2) # 2×2
mat2 <- matrix(5:8, nrow=2) # 2×2
cbind(mat1, mat2) # 2×4矩阵
rbind(mat1, mat2) # 4×2矩阵
A matrix: 2 × 4 of type int
| 1 | 3 | 5 | 7 |
| 2 | 4 | 6 | 8 |
A matrix: 4 × 2 of type int
| 1 | 3 |
| 2 | 4 |
| 5 | 7 |
| 6 | 8 |
3.2 多维数组绑定abind::abind()
- 扩展了基础函数 cbind()和 rbind()的功能,支持在任意维度合并数组。
abind::abind(...,
along = N, # 指定绑定维度
rev.along = NULL, # 备用维度
new.names = NULL, # 新维度名称
force.array = TRUE,
make.names = FALSE,
use.first.dimnames = FALSE,
hier.names = FALSE,
use.dnns = FALSE)
# 创建RGB通道 (高度×宽度)
red_channel <- matrix(runif(100), 10, 10)
green_channel <- matrix(runif(100), 10, 10)
blue_channel <- matrix(runif(100), 10, 10)
# 合并为完整图像 (高度×宽度×通道)
image_data <- abind(red_channel, green_channel, blue_channel,
along=3,
new.names=list(NULL, NULL, c("R","G","B")))
# 提取红色通道
image_data[,,1]
| Vector | Matrix | Array |
|---|
names() | rownames(), colnames() | dimnames() |
length() | nrow(), ncol() | dim() |
c() | rbind(), cbind() | abind::abind() |
| — | t() | aperm() |
is.null(dim(x)) | is.matrix() | is.array() |
参考资料: