Если вы поэкспериментируете с небольшой матрицей, вам будет легче увидеть, что происходит:
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
который вдруг больше не является матрицей!Именно об этом и говорила ошибка («поставьте ... как в матрице« х »»).Это связано с тем, что 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
но она, по крайней мере, существует ...