Ошибки при создании списка (ковариационных) матриц с использованием lapply в R - PullRequest
0 голосов
/ 10 июня 2018

У меня есть эта формула, которая создает большой список из 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'

Кто-нибудь знает решение этой проблемы?

1 Ответ

0 голосов
/ 10 июня 2018

Если вы поэкспериментируете с небольшой матрицей, вам будет легче увидеть, что происходит:

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

но она, по крайней мере, существует ...

...