R几乎每天都一次又一次地让我感到惊讶:
m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 ){
print(m);
m <- m[-1,]
}
Run Code Online (Sandbox Code Playgroud)
得到:
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
[,1] [,2]
[1,] 2 5
[2,] 3 6
Error in while (dim(m)[1] > 0) { : argument is of length zero
Run Code Online (Sandbox Code Playgroud)
R有1xn矩阵的问题或我的错误在哪里?
> nrow( m[-c(2,3), ] )
NULL
> dim( m[-c(2,3), ] )
NULL
> m[-c(2,3), ][,1]
Error in m[-c(2, 3), ][, 1] : incorrect number of dimensions
> str( m[-c(2,3), ] )
int [1:2] 1 4
Run Code Online (Sandbox Code Playgroud)
知道如何轻松修复最初的例子,这接近我的实际问题吗?BTW:这个循环是我的算法的瓶颈.因此,赞赏有效的解决方案.
非常感谢!
[子集化的默认行为是转换为更简单的结构(如果适用).换句话说,一旦您将1xn矩阵子集化,该对象就会转换为向量.
要更改此行为,请使用以下drop=FALSE参数[:
m <- matrix( 1:6, ncol=2 )
while( dim(m)[1] > 0 ){
print(m);
m <- m[-1, , drop=FALSE]
}
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
[,1] [,2]
[1,] 2 5
[2,] 3 6
[,1] [,2]
[1,] 3 6
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅 ?"["