R语言数据类型4:R语言中向量、矩阵和数组的比较 Comparison of vectors, matrices, and arrays in R

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))
  1. 'a'
  2. '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
  1. 2
  2. 3
  1. 3
  2. 2
  1. 2
  2. 3
  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
1357
2468
A matrix: 4 × 2 of type int
13
24
57
68

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]
VectorMatrixArray
names()rownames(), colnames()dimnames()
length()nrow(), ncol()dim()
c()rbind(), cbind()abind::abind()
t()aperm()
is.null(dim(x))is.matrix()is.array()

参考资料:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值