-6

我正在尝试将具有 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
4

3 回答 3

2

以下是几种可能性:

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
于 2013-08-29T12:20:51.003 回答
2

您不能只使用向量而不是单列矩阵吗?

as.vector( m )
#[1] 0 0 0 3 2 1 2 1 1

我想不出 R 中可以使用单列矩阵但不能使用相同长度的向量的操作。

于 2013-08-29T12:34:18.040 回答
1

另一种选择:

> 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(·))这将适用于任何矩阵尺寸。

于 2013-08-29T12:26:46.510 回答