2016-06-14 24 views
0

間の対比較を行う私が行列を持っていると私はすべての可能な組み合わせ(一意の)間の対比較をしたい:は、すべての可能な組み合わせ

data.frame

 A  B  C  D 
a  2  0  2  50 
b  1  3  1  2 
c  4  6  7  50 
d  1  3  8  2 
... ...  ... ... ... 


library(utils) 
combined <- combn(samples,2,simplify = FALSE) 

combined 
[[1]] 
[1] "A" "B" 

[[2]] 
[1] "A" "C" 
... 

par(mfrow=c(2,2)) 
for(i in 1:length(combined)){ 
    cor <- sprintf(cor(dat$combined[[i]][1],dat$combined[[i]] [2]),fmt='%#.2g',method="spearman") 
    smoothScatter (
     dat$combined[[i]][1], 
     dat$combined[[i]][2], 
     main=paste0("Spearman= ",cor), 
    ) 
} 
dev.off() 

しかし、私は次のエラーを取得します:

Error in cor(dat$combined[[i]][1], dat$combined[[i]][2]) : 
    supply both 'x' and 'y' or a matrix-like 'x' 
+0

あなたは 'matrix'と言っていますが、データフレームのように行と列にアクセスしようとします。 'xm = matrix(1:4、2); xdf = as.data.frame(xm); 'xm [[1]]とxdf [[1]]の違いを見てください。 – Gregor

+0

申し訳ありませんが、Data.frame – user6013305

+3

問題を見つけるまで、 'i'を1に設定し、あなたのループの中で小さくて小さなコードを実行することをお勧めします。たとえば、 'dat $ combined [[i]] [1]'は 'dat'が' combined'という名前の列を持つデータフレームであるように見えます。最初のリストの最初の要素が必要な '[[' 'を使って列の要素にアクセスします。あなたが見せてくれる「dat」のようには聞こえません。 – Gregor

答えて

0

私はちょうどコサイン代わりに、類似性又は相関を除き、事のほとんどまったく同じようなものをやってしまった:

set.seed(255) 
mydata<-data.frame(matrix(rnorm(400), nrow = 20)) 
## 20x20 matrix 

choices<-choose(20,2) #20 choose 2 possible pairs 
combs<-combn(20,2) # create those pairs 

COR<-NULL 
A<-NULL 
B<-NULL 

    for(i in 1:choices) { 
    nums<-combs[,i] 
    COR[i]<-cor(mydata[,nums[1]], mydata[,nums[2]]) 
    A[i]<-nums[1] 
    B[i]<-nums[2] 
    } 

COR.data<-data.frame(A,B,COR) #create a data.frame with the results 
head(COR.data, 5) 

A B  COR 
1 2 0.246464 
1 3 0.209621 
1 4 -0.273593 
1 5 0.380731 
1 6 0.008158 

この結果、比較されたmydataオブジェクトの列AとBが比較されます。

関連する問題