R:as.matrix() 和matrix() 的区别

as.matrixmatrix 是 R 中用于处理矩阵的两个不同函数,它们有不同的用法和行为。

1.as.matrix 函数:

as.matrix 函数用于将一个对象转换为矩阵。如果对象已经是矩阵,则不会做任何改变。

它保持了原对象的结构,例如行名和列名,并且不会改变原有的行数和列数。

 适用于将稀疏矩阵、数据框等转换为普通矩阵。

#举个例子
sparse_matrix <- Matrix::rsparsematrix(3, 3, 0.5)
dense_matrix <- as.matrix(sparse_matrix)
sparse_matrix
dense_matrix

matrix 函数:

matrix 函数用于创建一个新的矩阵。它接受数据向量并根据指定的行数和列数将其填充到矩阵中。

如果输入的数据向量没有明确指定行数和列数,matrix 会默认将向量作为单列填充,造成结果变成一列的情况。

它不会自动保持输入对象的行名和列名。

#示例:
data_vector <- 1:9
data_vector
matrix(data_vector, nrow = 3, ncol = 3)# 这样可以正确创建 3x3 矩阵

可以看到matrix()默认是按照列来进行填充的

具体的区别在于:
  • as.matrix 会保持输入对象的结构(例如行名和列名),并仅改变对象的类型。
  • matrix 用于创建新的矩阵,并需要明确指定矩阵的维度(行数和列数)。如果没有明确指定维度,可能会导致结构发生变化。

因此,当你使用 matrix 时,如果没有指定维度信息,R 会将输入对象转换为一个列向量;而使用 as.matrix 时,R 会尽可能保持原对象的结构

为了保持矩阵的行名和列名不变并正确转换,可以使用 as.matrix 函数,这样可以避免 matrix 函数可能引起的结构变化问题。

如果你想使用 matrix 函数将稀疏矩阵转换为普通矩阵并保持原来的行和列,可以先提取稀疏矩阵的数据和维度信息,然后使用这些信息来创建新的矩阵。

举个例子:

sparse_matrix <- a$RNA #假设这是一个稀疏矩阵
# 提取稀疏矩阵的数据,转换成一个向量的形式
#matrix 函数需要一个一维向量作为数据输入,而不是直接处理稀疏矩阵
data_vector <- as.vector(sparse_matrix)

# 提取行名和列名
row_names <- rownames(sparse_matrix)
col_names <- colnames(sparse_matrix)

# 获取行数和列数
nrow <- nrow(sparse_matrix)
ncol <- ncol(sparse_matrix)

# 使用 matrix 函数创建新的矩阵,byrow = TRUE指定按照行来填充,不指定的话默认按照列来填充矩阵
dense_matrix <- matrix(data_vector, nrow = nrow, ncol = ncol,byrow = TRUE)

# 重新设置行名和列名
rownames(dense_matrix) <- row_names
colnames(dense_matrix) <- col_names

# 检查转换后的矩阵
head(dense_matrix)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值