2014-10-08 73 views
-3

我有20個對象。我有一個執行配對分析的功能。我想對所有對進行成對分析。假設函數是cor.test。而不是寫出所有190對將函數應用於排列對象

a <- cor.test(1,2); 
b <- cor.test(1,3); 
c <- cor.test(1,4) 
... 

我該如何將這個函數一次應用到所有對並吐出,在這種情況下,每對之間的相關性?任何意見,將不勝感激。

(如果它是很重要的,每個對象是一個矩陣)

+1

我投的,因爲它是不清楚你問什麼,收了這個問題。而且你也沒有提供預期輸出的可重複的例子。 – agstudy 2014-10-08 16:00:43

回答

1

您可以使用combn,不清楚你會怎麼做你的相關性矩陣之間,但在這裏,你有矢量我怎麼會做這樣假設:

## put your objects within the same list , you can use `mget` if you have 
## some pattern for your objects names 
ll <- list(obj1,obj2,obj3) 
## then combining to get all permutations and applying your function 
combn(seq_len(length(ll)),2,FUN = function(x){ 
    cor.test(ll[[x[1]]],ll[[x[2]]]) 
},simplify=FALSE) 

您的對象是:

obj1 = 1:5 
obj2 = 1:5 
obj3 = 1:5 
+0

謝謝。我得到一個顯示所有排列([1] 1 2; [2] 1 3; [3] 1 4;等)的輸出,但是如何檢索函數輸出(在這種情況下,[1 ] 1 2)? – user1038055 2014-10-08 15:29:19

+0

@ user1038055當您執行 agstudy 2014-10-08 15:45:38

+0

我沒有使用相關性測試,而是比較矩陣的更復雜的腳本。但我不確定與腳本的輸出有關怎麼辦?如果我使用你的對象(obj1,obj2,obj3),我應該得到輸出三個相關統計量(1,1,1),否? – user1038055 2014-10-08 15:54:22

0

嘗試:

objlist = c(obj1, obj2, obj3) 

outlist = list() 
len = length(objlist) 
for(i in 1:len) for (j in 1:len) if(i != j) { 
    outlist[[length(outlist)+1]] = cor.test(objlist[[i]], objlist[[j]]) 
} 

OR:

outlist = sapply(objlist, function(x) { sapply(objlist, function(y) cor.test(x,y)) }) 
+0

當我運行頂級腳本時,我收到警告「沒有足夠的有限觀察值」。如果我使用objlist列表(= list(obj1,obj2,obj3)),那麼我會得到9個關聯測試結果(太多),所有列出objlist [[i]]和objlist [[j]]作爲數據。也許我做錯了什麼或者是你的輸出? – user1038055 2014-10-08 15:50:22

+0

Objlist將不得不作出。我已經添加了'if(i!= j)',以便該對象與自己沒有關聯,你會得到6個結果現在。 – rnso 2014-10-08 16:23:41