我有使用 R 的任务并且有一个小问题。在分配中,必须生成具有随机行数的矩阵,然后用于各种计算。一切都很完美,除非行数为 1。
在计算中,我以不同的方式使用 nrow(matrix),例如if (i <= nrow(matrix) ) {action}
,还有诸如此类的语句matrix[,4]
。
因此,如果行数为 1(我知道它实际上是向量),R 会给出错误,这肯定是因为 nrow(一维矩阵)=NULL。有没有简单的方法来处理这个?否则可能必须重写整个代码,但我的时间很短:(
我有使用 R 的任务并且有一个小问题。在分配中,必须生成具有随机行数的矩阵,然后用于各种计算。一切都很完美,除非行数为 1。
在计算中,我以不同的方式使用 nrow(matrix),例如if (i <= nrow(matrix) ) {action}
,还有诸如此类的语句matrix[,4]
。
因此,如果行数为 1(我知道它实际上是向量),R 会给出错误,这肯定是因为 nrow(一维矩阵)=NULL。有没有简单的方法来处理这个?否则可能必须重写整个代码,但我的时间很短:(
并不是 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
或者通过添加参数来防止[]
运算符删除:dim
drop=FALSE
x<-matrix(1:12,3,4)
x #OK, matrix
x[,3] #Boo, vector
x[,3,drop=FALSE] #Matrixicity saved!
让我们称您为 vector x
。尝试使用matrix(x)
或t(matrix(x))
将其转换为适当的(2D)矩阵。