2013-07-15 74 views
0

我有三個數據集,想知道我的計算中使用了多少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來遍歷所有的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個datas進行測試時,它進行得很順利!

 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]! 感謝

+3

對不起,但是據我所知,cor.test有兩個參數,但是你傳遞了三個參數。這應該如何工作? – January

+0

我在嘗試,但我不確定我們是否可以使其工作。有沒有其他方法來計算三個參數的三個像cor.test的N! – sacvf

+0

我不確定你的意思是「N三元組」。組合總數?有比計算相關係數更簡單的方法。 – January

回答

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將執行所有列的組合。

+0

感謝,運作良好,但結果'昏暗'是不正確的。看看這個'str(結果) num [1:9,1:20,1:30] 100 100 100 100 100 100 100 100 100 100 ...' – sacvf

+0

@sacvf我編輯我的答案。 – agstudy

+0

結果的暗淡是不正確的。看看這個'str(result)''num [1:9,1:20,1:30] 100 100 100 100 100 100 100 100 100 100'' – sacvf

相關問題