我正在尝试将具有 4 列的矩阵转换为具有 1 列的矩阵,如示例:
我尝试了代码,但值出现在列表中,我想要可以进行一些操作的值!
f.con <- matrix (c(ex),
ncol=1, byrow=TRUE)
Initial matrix (ex)
0 3 2
0 2 1
0 1 1
Final matrix with 1 colunm:
0
0
0
3
2
1
2
1
1
以下是几种可能性:
dim(m) <- c(length(m), 1)
# or
m <- matrix(m, ncol = 1)
然而,后一种方法较慢。
# As I understand, the reason this is fast is that it
# literally transforms the matrix
m <- matrix(0:1, ncol = 10000, nrow = 10000)
system.time(dim(m) <- c(length(m), 1))
# user system elapsed
# 0 0 0
m <- matrix(0:1, ncol = 10000, nrow = 10000)
# Whereas here a copy is being made
system.time(m2 <- matrix(m, ncol = 1))
# user system elapsed
# 0.45 0.16 0.61
# And here a long vector is needed first
system.time(m3 <- as.matrix(c(m)))
Error: cannot allocate vector of size 381.5 Mb
您不能只使用向量而不是单列矩阵吗?
as.vector( m )
#[1] 0 0 0 3 2 1 2 1 1
我想不出 R 中可以使用单列矩阵但不能使用相同长度的向量的操作。
另一种选择:
> mat <- matrix(c(0,0,0,3,2,1,2,1,1), 3) # your matrix
> as.matrix(c(mat)) # the disired output
[,1]
[1,] 0
[2,] 0
[3,] 0
[4,] 3
[5,] 2
[6,] 1
[7,] 2
[8,] 1
[9,] 1
请注意,您正在寻找 vec 运算符的实现,该运算符已经在 R 中的函数c(·)
和下实现as.vector(·)
,它们都将给出一个向量,如果您真的想要一列矩阵,那么只需编写as.matrix(c(·))
或as.matrix(as.vector(·))
这将适用于任何矩阵尺寸。