目前我做以下事情:
x <- cbind(c(1, 2, 3), c(4, 5, 6))
x.merged <- matrix(t(x), ncol=1)
Run Code Online (Sandbox Code Playgroud)
使用1, 4, 2, 5, 3, 6,矩阵中的值创建一个列x.但依靠t(x)似乎有点笨重.有一个更好的方法吗?我想避免使用for循环,或者apply是否有一个更简单的内置函数来处理这类事情.
编辑:更清楚,x只是给了我.上面的第一行代码仅用于说明所涉及的值.我可能写得更好:
> x
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
Run Code Online (Sandbox Code Playgroud)
实际上,如果你把它作为一个矢量,它不需要超过:
> c(t(x))
[1] 1 4 2 5 3 6
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的不得不避免t()那么你可以这样做:
> c(apply(x,2,rbind))
[1] 1 4 2 5 3 6
Run Code Online (Sandbox Code Playgroud)
这适用于任意数量的列,但包括应用.如果您不想使用那个,则必须手动指定要粘贴在彼此后面的所有列.但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
Run Code Online (Sandbox Code Playgroud)
请记住,矩阵可以看作是添加了维度的向量,并且始终按列方式读取.所以你无法真正避免t()在你的解决方案中.您可以随时将其用作矢量,例如:
> x[4]
[1] 4
Run Code Online (Sandbox Code Playgroud)
只要你记得矩阵是按列读取的.所以在你的情况下你需要
> t(x)[4]
[1] 5
Run Code Online (Sandbox Code Playgroud)
如果您真的需要它作为矩阵,那么:
> matrix(t(x))
[,1]
[1,] 1
[2,] 4
[3,] 2
[4,] 5
[5,] 3
[6,] 6
Run Code Online (Sandbox Code Playgroud)