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