具有2个计数变量的lapply函数

时间:2014-01-31 13:25:32

标签: r nested lapply sapply

我在R中非常环保,所以可能有一个非常简单的解决方案:

我想计算方阵中列向量之间的平均相关性:

x<-matrix(rnorm(10000),ncol=100)
aux<-matrix(seq(1,10000))
loop<-sapply(aux,function(i,j) cov(x[,i],x[,j])
cor_x<-mean(loop)

在评估sapply行时,我得到错误'下标超出界限'。我知道我可以通过脚本来做到这一点,但有没有办法在一行代码中实现这一点?

2 个答案:

答案 0 :(得分:6)

不需要任何循环。只需使用mean(cov(x)),就可以非常有效地执行此操作。

答案 1 :(得分:1)

问题归因于aux。由于您有aux列,变量1的范围必须从100100。但是,auxx的序列,因此范围从110000。它将使用以下代码:

aux <- seq(1, 100)
loop <- sapply(aux, function(i, j) cov(x[, i], x[, j]))

之后,您可以使用以下方法计算平均协方差:

cor_x <- mean(loop)

如果要排除重复字段(例如,cov(X,Y)本质上与cov(Y,X)相同),您可以使用:

cor_x <- mean(loop[upper.tri(loop, diag = TRUE)])

如果你还想排除cov(X,X),即方差,你可以使用:

cor_x <- mean(loop[upper.tri(loop)])