0

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

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

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

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

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

4

1 回答 1

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

代码将分配一个对角矩阵(第 4 个元素)作为 shwon a bove,但如果您没有正确的维度,这将不起作用。例如:

  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
于 2013-02-13T20:04:51.077 回答