我使用R进行分配并遇到一些问题。在分配中,必须使用随机行数生成几个矩阵,然后将其用于各种计算。除非行数为1,否则一切都很完美。
在计算中,我以不同的方式使用nrow(矩阵),例如if (i <= nrow(matrix) ) {action}
以及matrix[,4]
之类的语句等等。
因此,如果行数是1(我知道它实际上是向量)R给出错误,肯定是因为nrow(1维矩阵)= NULL。有没有简单的方法来处理这个?否则可能需要重写整个代码,但我的时间很短:(
答案 0 :(得分:7)
R中的单行/ col矩阵不是ncol
/ nrow
设置为NULL
- 在R中,一切都是1D向量,可以表现得像矩阵(即当它具有dim
属性集时,显示为矩阵,接受矩阵索引等。看起来似乎是因为简单地将矩阵索引到单个行或列 drop dim
并将数据保留为其默认(1D向量)状态。
因此,您可以通过直接重新创建向量的dim
属性(比如称为x)来实现目标:
dim(x)<-c(length(x),1)
x #Now a single column matrix
dim(x)<-c(1,length(x))
x #Now a single row matrix
或者通过添加[]
参数阻止dim
运算符删除drop=FALSE
:
x<-matrix(1:12,3,4)
x #OK, matrix
x[,3] #Boo, vector
x[,3,drop=FALSE] #Matrixicity saved!
答案 1 :(得分:4)
让我们调用你的向量x
。尝试使用matrix(x)
或t(matrix(x))
将其转换为正确的(2D)矩阵。