只在R中使用sapply获得特征值

时间:2013-02-03 09:48:06

标签: r

我尝试了许多不同的东西,只有在循环列表但没有工作时才能获得特征值。这就是代码:

myarray=matrix(rexp(200),50,5)
list.of.matrices <- apply(expand.grid(rep(list(c(FALSE, TRUE)), ncol(myarray))),
                              1, function(j)myarray[, j, drop = FALSE])
list.of.cov.matrices=sapply(list.of.matrices, cov)
eigen.val<- sapply(list.of.cov.matrices, eigen$values)

也尝试过:

eigen.val=apply(list.of.cov.matrices, 1, function(eigen) FUN(eigen, only.values = T))

最后,我想构建一个包含每个矩阵的特征值的表。

构建我使用的表:

eigen.sum=data.frame(
  list.eigen.of.cor.matrices=rep(1:length( eigen.val), sapply( eigen.val, length)),
  y=unlist( eigen.val)

这会影响表格,但是必须遵循excel中的其他操作,所以如果可能的话,请直接进行。

1 个答案:

答案 0 :(得分:2)

这里有两个问题。首先,输入中有一个0*0矩阵,它会返回错误。其次,调用eigen函数(在第一个命令中)的方式不正确。

基本上,您必须检查矩阵的维度是否为0*0,然后正确调用eigen函数。试试这个:

eigen <- sapply(list.of.cov.matrices, function(x) {
    if (prod(dim(x)) > 0) {
        eigen(x)$values
    }
})