给定从1到12的数字,是否有任何现有的函数可以创建以下矩阵,并在此处指定类似size
的选项?我只能想到使用by.column创建每个矩阵并使用rbind
将它们绑定在一起。这有什么更清洁的选择吗?
m <- matrix(1:12, ncol=3, byrow=TRUE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
期望的输出:
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 7 9 11
[4,] 8 10 12
答案 0 :(得分:2)
也许这更干净(假设矩阵不是矢量,因为你没有指定列数):
m <- matrix(1:12, ncol=3, byrow=TRUE)
size <- 2
cols <- ncol(m)
m2 <- c(apply(m, 1, c))
do.call(rbind, lapply(split(m2, rep(seq_len(length(m2) /(size*cols)), each = size*cols)), matrix, nrow = size))
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
## [3,] 7 9 11
## [4,] 8 10 12
答案 1 :(得分:0)
我认为aperm()
在这里很有用
mymat<-function(size, ncol=3, start=1, end=12) {
v <- start:end
stopifnot(length(v)%%ncol==0, length(v)%%size==0)
a <- array(v, dim=c(length(v)/ncol/size, ncol, size))
matrix(aperm(a, c(1,3,2)), ncol=ncol)
}
mymat(2)
# [,1] [,2] [,3]
# [1,] 1 3 5
# [2,] 2 4 6
# [3,] 7 9 11
# [4,] 8 10 12