调用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

为什么会这样呢?

最佳答案

根据?"[<-"帮助页面,drop=“仅适用于提取元素,而不适用于替换”,因此,您不可以将<-drop一起使用,这基本上就是diag()所做的事情。就像我在上面的评论中一样,也不允许类似X[,,drop=TRUE] <- 1:9之类的东西。不幸的是,错误消息没有更具体。

关于r - 使用drop = FALSE分配给子矩阵对角线时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23462775/

10-12 19:59