在R中使用diag()

时间:2013-02-13 19:44:03

标签: r matlab matrix

我正在查看我正在转换为Matlab的这段代码,我只有源代码而不是R中正在运行的版本。

Result[,1:2]<-diag(max)

其中max是[2 * 1]数组。

我假设这是在rhs上创建一个对角矩阵,它被分配给Result中的前4个元素。

但是,我现在认为只有lhs上的对角元素应该改变(来自RHS的最大值)。这是正确的代码读取吗?

1 个答案:

答案 0 :(得分:1)

此代码不会分配。只需按元素比较矩阵,元素。 只有在尺寸正确的情况下才有效。 这是一个例子:

set.seed(1234)

Result <- matrix(rnorm(20),nrow=2)
Result[,1:2] <= diag(max(c(2,2)))

     [,1]  [,2]
[1,]  TRUE FALSE
[2,] FALSE  TRUE

这是一个你得到错误的例子(最可能的情况)

Result[,1:2] <= diag(max(c(2,4)))
Error in Result[, 1:2] <= diag(max(c(2, 4))) : non-conformable arrays
OP编辑后

编辑

如果原始代码是

Result[,1:2] <- diag(max(c(2,2)))

   [,1] [,2]      [,3]       [,4]       [,5]
[1,]    1    0 0.4291247 -0.5747400 -0.5644520
[2,]    0    1 0.5060559 -0.5466319 -0.8900378

代码将指定一个对角矩阵(4th elemntss)作为一个bw,但如果你没有正确的尺寸,这将不起作用。例如:

  Result <- matrix(rnorm(6),nrow=3)
  Result[,1:2] <- diag(max(c(2,2)))

 Error in Result[, 1:2] <- diag(max(c(2, 2))) : 
 number of items to replace is not a multiple of replacement length

您遇到错误,因为结果的行数多于RHS。

Result
           [,1]       [,2]
[1,] -1.2070657 -2.3456977
[2,]  0.2774292  0.4291247
[3,]  1.0844412  0.5060559

和RHS是

diag(max(c(2,2)))
     [,1] [,2]
[1,]    1    0
[2,]    0    1