我正在尝试将带有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
答案 0 :(得分: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
答案 1 :(得分:2)
你能不能只用一个向量而不是一个列矩阵?
as.vector( m )
#[1] 0 0 0 3 2 1 2 1 1
我无法想象R中的操作,将使用单列矩阵,但不一个相同长度的矢量。
答案 2 :(得分: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
请注意,您正在寻找已经在函数c(·)
和as.vector(·)
下在R中实现的vec运算符的实现,如果您真的需要一个向量,它们都会给出一个向量 - 列矩阵,然后只需编写as.matrix(c(·))
或as.matrix(as.vector(·))
,这将适用于任何矩阵大小。