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

Mat*_*erg 5 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
Run Code Online (Sandbox Code Playgroud)

指定drop=false是一个不同的故事

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

注意:

> identical(X[-1,], X[-1,,drop=FALSE])
[1] TRUE
Run Code Online (Sandbox Code Playgroud)

正如MrFlick所指出的,当drop参数导致相同的错误时,赋值给切片:

X[1,] <- 1
X[1,,drop=TRUE] <- 2
Error in X[1, , drop = TRUE] <- 2 : incorrect number of subscripts
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

MrF*_*ick 3

根据?"[<-"帮助页面,drop=“仅适用于提取元素,不适用于替换”,因此不允许您使用基本上正在做的<-事情。正如我上面的评论所示,类似的事情也是不允许的。太糟糕了,错误消息没有更具体一点。dropdiag()X[,,drop=TRUE] <- 1:9