我有这个公式,它创建了一个包含 251 个元素的大列表:
lapply(2:nrow(mat), function(y) cov(mat[1:y,]))
mat
有dim()
:
[1] 252 80
但我希望它从 1 开始,即1:nrow(mat)
这样我得到 252 个类似于nrow(mat)
. 但是更改2:nrow(mat)
为1:nrow(mat)
会产生此错误消息:
lapply(1:nrow(mat), function(y) cov(mat[1:y,]))
Error in cov(mat[1:y, ]) :
supply both 'x' and 'y' or a matrix-like 'x'
有谁知道解决这个问题的方法?
如果你用一个小矩阵做实验,你可以更容易地看到发生了什么:
mat=matrix(1:12, 3,4)
lapply(1:nrow(mat), function(y) cov(mat[1:y,]))
Error in cov(mat[1:y, ]) :
supply both 'x' and 'y' or a matrix-like 'x'
所以你得到cov
的mat[1:1,]
:
> mat[1:1,]
[1] 1 4 7 10
它突然不再是矩阵了!这就是错误告诉你的(“供应......类似矩阵的'x'”)。这是因为当您对单行或单列进行子集化时,R 会删除维度。使用以下命令调整此行为drop=FALSE
:
> mat[1:1,,drop=FALSE]
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
无论如何,列式协方差此时并不是很有意义:
> cov(mat[1:1,, drop=FALSE])
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
但它至少存在...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句