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