如何计算三个数据集之间的组合总数?

时间:2013-07-15 17:24:33

标签: r

我有三个数据集,并且想知道在我的计算中使用了多少N.

我将数据读入具有尺寸(nx,ny,ntsteps,ndatasets)的多维数组中,例如使用较小的示例数据集:

      # nx   ny   nsteps ndatasets
            dat = runif(20 * 30 * 100 *  3)
        dim(dat) = c(20, 30, 100, 3)
        > str(dat)
    num [1:20, 1:30, 1:100, 1:3] 0.1834 0.8537 0.0672 0.0734 0.8078 ...

我们利用cor函数并构建此函数来计算我们有多少N:

    cor_withN <- function(...) {
        res <- try(cor.test(...)$parameter+2, silent=TRUE)
        ifelse(class(res)=="try-error", NA, res)}

现在我们利用apply也适用于多维数组,而不仅仅是矩阵:

我们使用apply迭代所有x,y,z三元组。

      result = apply(dat, c(1,2), function(x) cor_withN(x[,1], x[,2],x[,3]))
     > str(cor_result)
     logi [1:20, 1:30] NA NA NA NA NA NA ..

因此获得NA NA NA NA有些不对劲 如果最后一行顺利的话!那么

     str(cor_result)   

应该是

     logi [1:20, 1:30] 100 100 100 100 100 ..(nsteps)

有关为什么我会获得NA或有其他方法可以做到这一点的任何想法吗?

当我用2个数据集进行测试时,它进展顺利!

      cor_result = apply(dat, c(1,2), function(x) cor_withN(x[,1], x[,2]))
      > str(cor_result)
     num [1:20, 1:30] 100 100 100 100 100 100 100 100 100 100

所以问题是当我添加x[,3] !! 感谢

1 个答案:

答案 0 :(得分:2)

使用this,您可以执行以下操作:

corpij <- function(i,j,data) {
             res <- tryCatch(cor.test(data[,i],data[,j])$parameter+2,
                    error = function(e) NA)

corp <- Vectorize(corpij, vectorize.args=list("i","j"))
result = apply(dat, c(1,2), 
               function(x) outer(1:ncol(x),1:ncol(x), corp,data=x))

outer将执行所有列组合。