使用R

时间:2018-06-10 13:32:59

标签: r list matrix lapply covariance

我有这个公式,它创建了251个元素的大型列表:

lapply(2:nrow(mat), function(y) cov(mat[1:y,]))

matdim()

[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 :(得分:2)

如果您尝试使用小矩阵,则可以更轻松地查看正在发生的事情:

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的{​​{1}}:

mat[1:1,]

突然不再是一个矩阵了!错误告诉你的是什么("提供......矩阵式' x'")。这是因为当您对单个行或列进行子集时,R会降低维度。使用> mat[1:1,] [1] 1 4 7 10 调整此行为:

drop=FALSE

无论如何,列式协方差在这一点上都没有意义:

> mat[1:1,,drop=FALSE]
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10

但它至少存在......