我有20個對象。我有一個執行配對分析的功能。我想對所有對進行成對分析。假設函數是cor.test。而不是寫出所有190對將函數應用於排列對象
a <- cor.test(1,2);
b <- cor.test(1,3);
c <- cor.test(1,4)
...
我該如何將這個函數一次應用到所有對並吐出,在這種情況下,每對之間的相關性?任何意見,將不勝感激。
(如果它是很重要的,每個對象是一個矩陣)
我有20個對象。我有一個執行配對分析的功能。我想對所有對進行成對分析。假設函數是cor.test。而不是寫出所有190對將函數應用於排列對象
a <- cor.test(1,2);
b <- cor.test(1,3);
c <- cor.test(1,4)
...
我該如何將這個函數一次應用到所有對並吐出,在這種情況下,每對之間的相關性?任何意見,將不勝感激。
(如果它是很重要的,每個對象是一個矩陣)
您可以使用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
謝謝。我得到一個顯示所有排列([1] 1 2; [2] 1 3; [3] 1 4;等)的輸出,但是如何檢索函數輸出(在這種情況下,[1 ] 1 2)? – user1038055 2014-10-08 15:29:19
@ user1038055當您執行 agstudy 2014-10-08 15:45:38
我沒有使用相關性測試,而是比較矩陣的更復雜的腳本。但我不確定與腳本的輸出有關怎麼辦?如果我使用你的對象(obj1,obj2,obj3),我應該得到輸出三個相關統計量(1,1,1),否? – user1038055 2014-10-08 15:54:22
嘗試:
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)) })
當我運行頂級腳本時,我收到警告「沒有足夠的有限觀察值」。如果我使用objlist列表(= list(obj1,obj2,obj3)),那麼我會得到9個關聯測試結果(太多),所有列出objlist [[i]]和objlist [[j]]作爲數據。也許我做錯了什麼或者是你的輸出? – user1038055 2014-10-08 15:50:22
Objlist將不得不作出。我已經添加了'if(i!= j)',以便該對象與自己沒有關聯,你會得到6個結果現在。 – rnso 2014-10-08 16:23:41
我投的,因爲它是不清楚你問什麼,收了這個問題。而且你也沒有提供預期輸出的可重複的例子。 – agstudy 2014-10-08 16:00:43