8

我有使用 R 的任务并且有一个小问题。在分配中,必须生成具有随机行数的矩阵,然后用于各种计算。一切都很完美,除非行数为 1。

在计算中,我以不同的方式使用 nrow(matrix),例如if (i <= nrow(matrix) ) {action},还有诸如此类的语句matrix[,4]

因此,如果行数为 1(我知道它实际上是向量),R 会给出错误,这肯定是因为 nrow(一维矩阵)=NULL。有没有简单的方法来处理这个?否则可能必须重写整个代码,但我的时间很短:(

4

2 回答 2

7

并不是 R 中的单行/列矩阵具有ncol/nrow设置为NULL- 在 R 中,所有内容都是一维向量,当它具有dim属性集时,它可以表现得像矩阵(即显示为矩阵、接受矩阵索引等) . 似乎不是这样,因为简单地将矩阵索引到单行或单列会丢弃 dim数据并将数据保持在默认(一维向量)状态。

因此,您可以通过直接重新创建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

或者通过添加参数来防止[]运算符删除:dimdrop=FALSE

x<-matrix(1:12,3,4)
x                #OK, matrix
x[,3]            #Boo, vector
x[,3,drop=FALSE] #Matrixicity saved!
于 2012-05-12T11:34:59.717 回答
4

让我们称您为 vector x。尝试使用matrix(x)t(matrix(x))将其转换为适当的(2D)矩阵。

于 2012-05-12T10:18:01.893 回答