使用drop = FALSE分配给子矩阵对角线时出错

时间:2014-05-04 23:33:37

标签: r

调用diag<-时,只要您没有指定drop=FALSE,就可以传递矩阵的一部分并获得正确的行为。

> X <- matrix(0, 3, 3)
> diag(X[-1,]) <- c(1,2)
> X
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    1    0    0
[3,]    0    2    0

指定drop=false是另一回事

> diag(X[-1,,drop=FALSE]) <- c(3,4)
Error in diag(X[-1, , drop = FALSE]) <- c(3, 4) : 
  incorrect number of subscripts

注意:

> identical(X[-1,], X[-1,,drop=FALSE])
[1] TRUE

如MrFlick所述,当drop参数导致相同的错误时,分配给切片:

X[1,] <- 1
X[1,,drop=TRUE] <- 2
Error in X[1, , drop = TRUE] <- 2 : incorrect number of subscripts

为什么会这样?

1 个答案:

答案 0 :(得分:3)

根据?"[<-"帮助页面,drop=&#34;仅适用于提取元素,而不适用于替换&#34;因此,我们不允许<-使用drop diag(),这基本上是X[,,drop=TRUE] <- 1:9正在做的事情。正如我在上面的评论中所述,{{1}}之类的内容也不允许。太糟糕了,错误信息没有那么具体。