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