На самом деле, если вы сделаете его вектором, это займет не более:
> c(t(x))
[1] 1 4 2 5 3 6
Или, если вам действительно нужно избегать t()
, вы можете сделать:
> c(apply(x,2,rbind))
[1] 1 4 2 5 3 6
Это работает для произвольного числа столбцов, но включает в себя применение.Если вы не хотите использовать его, вам придется вручную указать все столбцы, которые вы хотите вставить позади друг друга.Но решение t () является самым быстрым:
> n <- 10000000
> x <- matrix(rnorm(n),ncol=2)
> system.time(c(t(x)))
user system elapsed
0.07 0.00 0.06
> system.time(c(rbind(x[,1],x[,2])))
user system elapsed
0.22 0.05 0.26
Помните, что матрица может рассматриваться как вектор с добавленными к нему измерениями и всегда читается по столбцам.Таким образом, вы действительно не можете избежать t()
в вашем решении.Вы всегда можете использовать его как вектор, например:
> x[4]
[1] 4
просто работает, если вы помните, что матрица читается по столбцам.Так что в вашем случае вам понадобится
> t(x)[4]
[1] 5
Если вам действительно нужно это как матрица, тогда:
> matrix(t(x))
[,1]
[1,] 1
[2,] 4
[3,] 2
[4,] 5
[5,] 3
[6,] 6